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正则表达式的使用范例详解
Aug 08 Python
粗略分析Python中的内存泄漏
Apr 23 Python
Python递归遍历列表及输出的实现方法
May 19 Python
python 类详解及简单实例
Mar 24 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
django Serializer序列化使用方法详解
Oct 16 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
Nov 07 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
Python 过滤错误log并导出的实例
Dec 26 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 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
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
一看就懂得Python的math模块
2018/10/21 Python
python后端接收前端回传的文件方法
2019/01/02 Python
使用pandas读取文件的实现
2019/07/31 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
英国网上超市:Ocado
2020/03/05 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
教师队伍管理制度
2014/01/14 职场文书
志愿者活动总结
2014/04/28 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
公司员工奖惩制度
2015/08/04 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python