Python机器学习之scikit-learn库中KNN算法的封装与使用方法


Posted in Python onDecember 14, 2018

本文实例讲述了Python机器学习之scikit-learn库中KNN算法的封装与使用方法。分享给大家供大家参考,具体如下:

1、工具准备,python环境,pycharm

2、在机器学习中,KNN是不需要训练过程的算法,也就是说,输入样例可以直接调用predict预测结果,训练数据集就是模型。当然这里必须将训练数据和训练标签进行拟合才能形成模型。

Python机器学习之scikit-learn库中KNN算法的封装与使用方法

3、在pycharm中创建新的项目工程,并在项目下新建KNN.py文件。

import numpy as np
from math import sqrt
from collections import Counter
class KNNClassifier:
  def __init__(self,k):
    """初始化KNN分类器"""
    assert k >= 1
    """断言判断k的值是否合法"""
    self.k = k
    self._X_train = None
    self._y_train = None
  def fit(self,X_train,y_train):
    """根据训练数据集X_train和Y_train训练KNN分类器,形成模型"""
    assert X_train.shape[0] == y_train.shape[0]
    """数据和标签的大小必须一样
    assert self.k <= X_train.shape[0]
    """k的值不能超过数据的大小"""
    self._X_train = X_train
    self._y_train = y_train
    return self
  def predict(self,X_predict):
    """必须将训练数据集和标签拟合为模型才能进行预测的过程"""
    assert self._X_train is not None and self._y_train is not None
    """训练数据和标签不可以是空的"""
    assert X_predict.shape[1]== self._X_train.shape[1]
    """待预测数据和训练数据的列(特征个数)必须相同"""
    y_predict = [self._predict(x) for x in X_predict]
    return np.array(y_predict)
  def _predict(self,x):
    """给定单个待测数据x,返回x的预测数据结果"""
    assert x.shape[0] == self._X_train.shape[1]
    """x表示一行数据,即一个数组,那么它的特征数据个数,必须和训练数据相同
    distances = [sqrt(np.sum((x_train - x)**2))for x_train in self._X_train]
    nearest = np.argsort(distances)
    topk_y = [self._y_train[i] for i in nearest[:self.k]]
    votes = Counter(topk_y)
    return votes.most_common(1)[0][0]

4、新建test.py文件,引入KNNClassifier对象。

from KNN.py import KNNClassifier
raw_data_x = [[3.393,2.331],
       [3.110,1.781],
       [1.343,3.368],
       [3.582,4.679],
       [2.280,2.866],
       [7.423,4.696],
       [5.745,3.533],
       [9.172,2.511],
       [7.792,3.424],
       [7.939,0.791]]
raw_data_y = [0,0,0,0,0,1,1,1,1,1]
X_train = np.array(raw_data_x)
y_train = np.array(raw_data_y)
x = np.array([9.880,3.555])
# 要将x这个矩阵转换成2维的矩阵,一行两列的矩阵
X_predict = x.reshape(1,-1)
"""1,创建一个对象,设置K的值为6"""
knn_clf = KNNClassifier(6)
"""2,将训练数据和训练标签融合"""
knn_clf.fit(X_train,y_train)
"""3,经过2才能跳到这里,传入待预测的数据"""
y_predict = knn_clf.predict(X_predict)
print(y_predict)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
python实现k-means聚类算法
Feb 23 Python
Python RabbitMQ消息队列实现rpc
May 30 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
如何基于python测量代码运行时间
Dec 25 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
python爬虫之selenium库的安装及使用教程
May 23 Python
Python面向对象之类的内置attr属性示例
Dec 14 #Python
python模糊图片过滤的方法
Dec 14 #Python
python 随机打乱 图片和对应的标签方法
Dec 14 #Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 #Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 #Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 #Python
用python爬取租房网站信息的代码
Dec 14 #Python
You might like
php实现mysql数据库备份类
2008/03/20 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
深入分析PHP设计模式
2020/06/15 PHP
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
红米手机抢购的js代码
2014/03/10 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
外国人聘用意向书
2014/04/01 职场文书
小学生学习保证书
2015/02/26 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
贫困证明书范文
2015/06/16 职场文书
趣味运动会口号
2015/12/24 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis