算法原理
样本之间的距离公式计算,有叫欧式公式。
例如有两个样本: a(a1,a2,a3) b(b1,b2,b3)
则两个样本之间距离公式如下:
若有多个特征公式同理。
原理:相似样本之间的距离应该是比较近的
优缺点
优点:易于理解 ,简单 不需要估计参数 ,无需训练
缺点:懒惰算法 对测试样本分类时的计算量太大,内存开销大 而且必须指定k值,k值选择不当则分类精度保证不了。
使用场景:小数据场景,几千到几万个样本。
k-近邻预测wine类别
数据集
skl_learn代码
import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler,StandardScaler
def knncls():
"""
k-近邻对wine数据集分类
:return: None
"""
# 读取数据
names = ["a", "b", "c", "d","e", "f", "g", "h","i", "j", "k","l", "m", "n"]
data = pd.read_csv("./data/UCI/wine.data",names = names)
y = data["a"]
x = data.drop(["a"],axis=1)
print(x.head())
print(y.head())
# 数据处理
# 进行数据的分割 训练集 和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.25)
# 特征工程(标准化)
std = StandardScaler()
# 对训练集的特征值进行标准化
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
# k-近邻算法流程
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(x_train,y_train)
y_pridict = knn.predict(x_test)
print("预测wine类别:",y_pridict)
print("预测wine准确率:", knn.score(x_test,y_test))
if __name__ == "__main__":
knncls()