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 字符串格式化代码
Mar 17 Python
python实现彩票系统
Jun 28 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
Python使用selenium + headless chrome获取网页内容的方法示例
Oct 16 Python
Python values()与itervalues()的用法详解
Nov 27 Python
python实现录音功能(可随时停止录音)
Oct 26 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
Content-type 的说明
2006/10/09 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
Yii学习总结之安装配置
2015/02/22 PHP
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
webpack入门必知必会
2017/01/16 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
python爬虫之百度API调用方法
2017/06/11 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
详解python中的异常捕获
2020/12/15 Python
医学护理毕业生自荐信
2013/11/07 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
会议通知
2015/04/15 职场文书
建筑工程催款函
2015/06/24 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
2019银行竞聘书
2019/06/21 职场文书
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL