算法之k-近邻算法(KNN)
分类算法:k-近邻算法(KNN)
定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别
来源:KNN算法最早由Cover和Hart提出的一种分类算法
计算公式(又叫欧式距离)
计算a,b两点的距离:
注意:k-近邻算法是需要做标准化处理
sklearn k-近邻算法API
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, algorithm=’auto’)
- n_neighbors: int,可选(默认=5),
- n_neighbors查询默认使用的邻居数
- algorithm: {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}
- 可选用于计算最近邻居的算法:
- ’ball_tree’将会使用BallTree,
- ’kd_tree’将会使用KDTree。
- ’auto’将尝试根据传递给fit方法的值来决定最适合的算法。(不同实现方式影响效率)
- 可选用于计算最近邻居的算法:
实现一个简单的分类
构造数据集(预测澳门风云的电影类型,文件命名为data.csv)
导入数据
# 导入库
import pandas as pd
# 读取数据
data = pd.read_csv('./data.csv')
进行数据预处理
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
# 分类别
# label_encoder.fit(['爱情片', '动作片'])
label = label_encoder.fit_transform(data['类型'])
print(label)
# 覆盖
data['类型'] = label
标准化
y = data['类型']
x = data.drop(['类型','电影'], axis=1)
# 进行标准化
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
x = std.fit_transform(x)
进行knn算法训练
from sklearn.neighbors import KNeighborsClassifier
# 进行算法
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(x, y)
预测
# 进行预测
test = [[22,111]]
predict = knn.predict(test)
print('预测结果:', predict)
控制台打印
电影 打斗镜头 接吻镜头 类型
0 功夫瑜伽 121 13 动作片
1 非诚勿扰 21 78 爱情片
2 乘风破浪 1 56 爱情片
3 非常完美 10 99 爱情片
4 东邪西毒 79 11 动作片
5 功夫之王 81 7 动作片
6 天下无贼 69 13 动作片
7 四大名捕 99 23 动作片
[0 1 1 1 0 0 0 0]
预测结果: [1]