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实现Linux下守护进程的编写方法
Aug 22 Python
Python写的服务监控程序实例
Jan 31 Python
简单介绍Python下自己编写web框架的一些要点
Apr 29 Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 Python
Apache如何部署django项目
May 21 Python
python中kmeans聚类实现代码
Feb 23 Python
python清除函数占用的内存方法
Jun 25 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
python模拟斗地主发牌
Apr 22 Python
Pytorch 高效使用GPU的操作
Jun 27 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 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
Python中元组,列表,字典的区别
2017/05/21 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
python 实现登录网页的操作方法
2018/05/11 Python
python3实现表白神器
2019/04/09 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
Python函数基本使用原理详解
2020/03/19 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
Python requests上传文件实现步骤
2020/09/15 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
副总经理工作职责
2013/11/28 职场文书
大学军训感言400字
2014/03/11 职场文书
安踏广告词改编版
2014/03/21 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
市场营销计划书
2019/04/24 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL