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 相关文章推荐
动态创建类实例代码
Oct 07 Python
Python深入学习之上下文管理器
Aug 31 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
Python配置mysql的教程(推荐)
Oct 13 Python
Python批量更改文件名的实现方法
Oct 29 Python
树莓派实现移动拍照
Jun 22 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
pytorch进行上采样的种类实例
Feb 18 Python
python操作ini类型配置文件的实例教程
Oct 30 Python
python3实现飞机大战
Nov 29 Python
python glom模块的使用简介
Apr 13 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互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
js实现秒表计时器
2019/12/16 Javascript
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
python中根据字符串调用函数的实现方法
2016/06/12 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
python绘制中国大陆人口热力图
2018/11/07 Python
Python实现Linux监控的方法
2019/05/16 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
AmazeUI在模态框中嵌入表单形成模态输入框
2020/08/20 HTML / CSS
上海奥佳笔试题面试题
2016/11/16 面试题
2015年毕业生自我鉴定模板
2014/09/19 职场文书
先进班集体申报材料
2014/12/26 职场文书
市场部岗位职责
2015/02/12 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
Python实现拼音转换
2021/06/07 Python
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python
Nginx安装配置详解
2022/06/25 Servers