1.超参数:在机器学习中,超参数是指在机器学习之前,提前设置好的参数。而不是由数据训练出来的。
2.KNN算法通过测量观测点与相邻最近点之间的距离,判断观测点所属的类别,而测量距离的方法有很多种。有曼哈顿距离(又称“L1范数”),欧拉距离(又称“L2范数”)以及明科夫斯基距离等。
3.从上述的距离公式中,我们可以得到他们公式的共同点,有一个参数p,曼哈顿距离公式的参数p=1,欧拉距离公式的参数p=2。而在scikit-learn提供的KNN算法中提供了参数p。
4.scikit-learn在KNN算法中还提供了另一个权重的参数(weights),它有两个取值,一个是“uniform”,每个相邻点与观测点的距离的权重都是相同的。另一个取值为“distance”,权重点按其距离的倒数表示。在这种情况下,查询点的近邻比远处的近邻具有更大的影响力。
5.KNN算法中另一个重要的参数就是k,就是看观测点与近邻k个点的距离。
import numpy as np
from sklearn import datasets
digits = datasets.load_digits()
X = digits.data
y = digits.target
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y)
from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier(n_neighbors=3)
knn_clf.fit(X_train,y_train)
y_predict = knn_clf.predict(X_test)
from sklearn.metrics import accuracy_score
accuracy_score(y_predict,y_test)
best_score = 0.0
best_p = 0.0
%%time
for n in range(1,10):
for i in ["uniform","distance"]:
for p in range(1,6):
knn_clf = KNeighborsClassifier(n_neighbors=n,p=p,weights=i,n_jobs=-1)
knn_clf.fit(X_train,y_train)
y_predict = knn_clf.predict(X_test)
score = accuracy_score(y_predict,y_test)
if score > best_score:
best_score = score
best_p =p
print("best_accuracy_score : ",best_score)
print("best_p : ",best_p)
可以将数据集划分成训练集和测试集,将80%的划分为训练集,20%的划分为测试集。
通过for循环寻找最佳的参数,以此是正确率达到最大。
也可利用网格搜索。
param_grid = [
{
"weights":["uniform"],
"p" : [ i for i in range(1,9)]
},
{
"weights":["distance"],
"p":[i for i in range(1,9)]
}
]
from sklearn.model_selection import GridSearchCV
grid_search = GridSearchCV(knn_clf,param_grid)
grid_search.fit(X_train,y_train)
grid_search.best_params_
grid_search.best_score_
来源:CSDN
作者:喜欢你的小小叔
链接:https://blog.csdn.net/qq_45779388/article/details/104571405