KNN学习笔记

一、基本概念

KNN是有监督学习的分类算法,全称是K Nearest Neighbors,意思是K个最近的邻居。KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。计算 x和y两点的距离公式如下

d(x,y) = \sqrt{(x1-y1)^{2}+(x2-y2)^{2}+...+(xn-yn)^{2}}

二、代码实现

# 使用框架
from sklearn.neighbors import KNeighborsClassifier

clf = KNeighborsClassifier(n_neighbors= k)    # 实例化
clf = clf.fit(X_train, y_train)   # 用训练集数据训练模型
result = clf.score(X_test, y_test)    #导入测试集,从接口中调用需要的信息,检验准确率

from sklearn.neighbors import KNeighborsClassifier

from sklearn.datasets import load_iris  # 导入鸢尾花数据集
from sklearn.model_selection import train_test_split


data = load_iris()
X= data.data       # 特征矩阵
y = data.target    # 标签数组

# 可以把数据转成表格形式查看 
# import pandas as pd
# pd.DataFrame(X,columns = data.feature_names)

# 查看y都有哪些类别
# import numpy as np
# np.unique(y)

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.3,random_state = 1)


from sklearn.preprocessing import StandardScaler
transfer = StandardScaler() # 实例化一个标准化对象
X_train = transfer.fit_transform(X_train)  #对训练集的特征值进行标准化
X_test = transfer.transform(X_test)  # 对测试集的特征值进行标准化,不要加fit,不然两者数据不一致


clf = KNeighborsClassifier(n_neighbors=5)
clf = clf.fit(X_train,y_train)
result = clf.score(X_test,y_test)
result

三、为什么fit_transform用在训练数据,transform用在测试数据?

fit会计算出一些参数(均值、方差等训练集的固有属性),然后transform把这些转换(标准化、归一化、降维等)应用到输入的数据集中。

测试数据集是用来检测模型性能的,我们希望这是一个全新的数据集,这样才比较好的看出模型的泛化能力,模型在unseen的数据上表现怎么样。

如果在测试数据中用fit_transform,那么又重新的fit的一下,fit又计算新的均值和方差,相当于这些数据已经并不是未知的,并不是unseen的数据。所以在这个数据上的表现好并不能保证再新数据上表现好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值