Python机器学习之scikit-learn库中KNN算法的封装与使用方法
作者:我是马克思小清新 时间:2021-04-05 15:32:40
本文实例讲述了Python机器学习之scikit-learn库中KNN算法的封装与使用方法。分享给大家供大家参考,具体如下:
1、工具准备,python环境,pycharm
2、在机器学习中,KNN是不需要训练过程的算法,也就是说,输入样例可以直接调用predict预测结果,训练数据集就是模型。当然这里必须将训练数据和训练标签进行拟合才能形成模型。
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程序设计有所帮助。
来源:https://blog.csdn.net/qq_33531400/article/details/83036380
标签:Python,机器学习,scikit-learn库,KNN算法
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
数据库安全管理的三个经验分享
2009-04-01 15:49:00
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2021-10-21 15:35:47
![](https://img.aspxhome.com/file/2023/2/88922_0s.jpg)
使用AJAX和Django获取数据的方法实例
2021-11-14 20:40:20
全面分析Python的优点和缺点
2023-11-09 11:00:07
磁盘缓存专题之一 缓存命中和缓存未命中&缓存与缓冲间的差异
2012-10-07 11:02:46
python 删除列表里所有空格项的方法总结
2023-01-28 19:37:24
![](https://img.aspxhome.com/file/2023/9/65479_0s.jpg)
搭建 Selenium+Python开发环境详细步骤
2022-10-12 17:34:02
![](https://img.aspxhome.com/file/2023/0/83750_0s.png)
对python中数组的del,remove,pop区别详解
2021-01-23 09:22:31
python人工智能tensorflow常见损失函数LOSS汇总
2023-11-22 18:12:48
![](https://img.aspxhome.com/file/2023/7/64277_0s.png)
浅谈Python 中的复数问题
2023-04-22 17:02:11
![](https://img.aspxhome.com/file/2023/1/75181_0s.png)
在ASP.NET 2.0中操作数据之三十七:DataList批量更新
2023-07-23 10:59:03
![](https://img.aspxhome.com/file/2023/3/76343_0s.png)
N年前的JAVASCRIPT笔记
2009-01-07 12:40:00
Python+OCR实现文档解析的示例代码
2023-11-22 02:34:19
![](https://img.aspxhome.com/file/2023/0/82790_0s.jpg)
层叠加的五条叠加法则
2009-05-01 12:07:00
![](https://img.aspxhome.com/file/UploadPic/20095/1/01-99s.gif)
php使用递归与迭代实现快速排序示例
2023-11-14 09:46:31
Python入门第1/10页
2023-03-19 19:34:34
显示/隐藏引出的CSS Bug
2010-10-20 20:13:00
python爬虫之爬取百度音乐的实现方法
2022-09-02 06:22:10
![](https://img.aspxhome.com/file/2023/0/65420_0s.jpg)
python子类如何继承父类的实例变量
2022-05-07 08:41:26
使用eval()解析JSON格式字符串应注意的问题
2008-04-16 15:46:00