作为刚开始学习机器算法,其中knn算法是比较重要的,我就根据自己的相关理解来浅谈一下knn算法,请大佬指正不正确的地方,我努力改正。
1.knn算法步骤
首先选择k个与目标相近的邻居,然后根据欧几里得距离计算离目标最近的k个邻居,在这k个邻居中数出每个类别数量的邻居,将目标划分到在这k个邻居中数量最多的那个类别,直到把所有的目标数据点划分完成。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv('./data/Social_Network_Ads.csv')
#特征提取
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values
print(dataset)
#划分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.202, random_state = 0)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
2.1.手动knn调参
#手动knn调参
from sklearn.neighbors import KNeighborsClassifier
classifier1 = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2) #K就是n_neighbors p=1是曼哈顿距离,p=2是欧式距离
classifier1.fit(X_train, y_train) #p趋于无穷大是切比雪夫距离
classifier1.score(X_test,y_test) #准确率
2.2.自动knn调参
#4、调参,p超参数
best_score=0.0
best_k=-1
best_weight ='distance'
best_p=0
for j in range(1,6):#p值
for i in range(1,11): # 如果最大k值为最优,需要继续更大的k值循环
#print(i)
knn_clf = KNeighborsClassifier(n_neighbors=i, weights=best_weight, p=j) # 创建空分类器
knn_clf.fit(X_train, y_train) #训练
score = knn_clf. score(X_test, y_test)#查看准确率
if best_score < score:
best_score=score
best_k = i
best_p = j
print('best_weight = {} 的条件下:'.format (best_weight))
print (' best_score ={}'.format (best_score))
print('best_k = {}'. format(best_k))
在选择knn算法模型的时候可以选择2.1的手动调参,也可以选择2.2的自动找参数(只需要适当的划分数据集即可)
不断努力中...