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中lambda与def用法对比实例分析
Apr 30 Python
Python中你应该知道的一些内置函数
Mar 31 Python
Python 反转字符串(reverse)的方法小结
Feb 20 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
Python实现的简单计算器功能详解
Aug 25 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
Python数据类型之List列表实例详解
May 08 Python
选择python进行数据分析的理由和优势
Jun 25 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 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
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
webstorm添加*.vue文件支持
2018/05/08 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
Python中encode()方法的使用简介
2015/05/18 Python
python的keyword模块用法实例分析
2015/06/30 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
django创建css文件夹的具体方法
2020/07/31 Python
python 基于wx实现音乐播放
2020/11/24 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
财务经理岗位职责
2013/11/09 职场文书
物理教师自荐信范文
2013/12/28 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
先进工作者个人总结
2015/02/15 职场文书
婚姻出轨保证书
2015/05/08 职场文书