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计算最大优先级队列实例
Dec 18 Python
Python3读取文件常用方法实例分析
May 22 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 Python
python 高效去重复 支持GB级别大文件的示例代码
Nov 08 Python
Python 调用 zabbix api的方法示例
Jan 06 Python
用django设置session过期时间的方法解析
Aug 05 Python
django框架forms组件用法实例详解
Dec 10 Python
python dumps和loads区别详解
Feb 04 Python
python pptx复制指定页的ppt教程
Feb 14 Python
Python 实现集合Set的示例
Dec 21 Python
python excel和yaml文件的读取封装
Jan 12 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
详解重置Django migration的常见方式
2019/02/15 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
2015年社区教育工作总结
2015/05/13 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
python实现自动清理文件夹旧文件
2021/05/10 Python