sklearn代码5 5-KNN参数的筛选

import numpy as np

from sklearn.neighbors import KNeighborsClassifier

from sklearn import datasets

# model_selection:模型选择
# cross_val_score:交叉 validation:验证
# 交叉验证
from sklearn.model_selection import cross_val_score

导包加载数据

X,y = datasets.load_iris(True)

X.shape
(150, 4)
150**0.5    # 样本数量的开平方

# K值选择时从1到13  大概是其开平方的数值,只是用于参考
12.24744871391589

cross_val_score交叉验证筛选最合适的参数

knn = KNeighborsClassifier()
score = cross_val_score(knn,X,y,scoring='accuracy',cv= 10)  #训练了10次
score.mean()
0.96666666666666679

应用cross_val_score筛选最合适的邻居数量

errors = []  #误差
for k in range(1,14):
    knn = KNeighborsClassifier(n_neighbors=k)
    
    score = cross_val_score(knn,X,y,scoring='accuracy',cv=6).mean()  # 越接近于1越好
    
#     误差越小 说明K选择越合适
    errors.append(1-score)
import matplotlib.pyplot as plt
%matplotlib inline

# k=11时,误差最小,说明K =  11对此案例来说是最合适的K值
plt.plot(np.arange(1,14),errors)
[<matplotlib.lines.Line2D at 0x27f2d147748>]

请添加图片描述

weights = ['uniform','distance']

for w in weights:
    knn = KNeighborsClassifier(n_neighbors= 11, weights= w)
    
    print(w,cross_val_score(knn,X,y,scoring='accuracy',cv = 6).mean())
uniform 0.980709876543
distance 0.979938271605

多参数组合使用cross_val_score筛选最合适的组合参数

模型如何调参的 ,参数调节

result = {}
for k in range(1,14):
    for w in weights:
        knn = KNeighborsClassifier(n_neighbors=k,weights=w)
        sm = cross_val_score(knn,X,y,scoring='accuracy',cv=6).mean()
        result[w+str(k)] =sm
result
{'distance1': 0.95910493827160492,
 'distance10': 0.97299382716049376,
 'distance11': 0.97993827160493829,
 'distance12': 0.97993827160493829,
 'distance13': 0.97299382716049376,
 'distance2': 0.95910493827160492,
 'distance3': 0.96604938271604934,
 'distance4': 0.96604938271604934,
 'distance5': 0.96604938271604934,
 'distance6': 0.97299382716049376,
 'distance7': 0.97299382716049376,
 'distance8': 0.97299382716049376,
 'distance9': 0.97299382716049376,
 'uniform1': 0.95910493827160492,
 'uniform10': 0.97299382716049376,
 'uniform11': 0.98070987654320996,
 'uniform12': 0.97376543209876543,
 'uniform13': 0.97376543209876543,
 'uniform2': 0.93904320987654311,
 'uniform3': 0.96604938271604934,
 'uniform4': 0.96604938271604934,
 'uniform5': 0.96604938271604934,
 'uniform6': 0.97299382716049376,
 'uniform7': 0.97299382716049376,
 'uniform8': 0.95910493827160492,
 'uniform9': 0.96604938271604934}
np.array(list(result.values())).argmax()
20
list(result)[20]
'uniform11'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SVM-KNN协同训练是一种结合支持向量机和k最近邻分类器的分类方法,并且可以使用协同训练来提高模型的性能。以下是一个简单的使用Python和scikit-learn库实现SVM-KNN协同训练的代码示例: ```python from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score # 生成一个二分类问题数据集 X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_classes=2, random_state=1) # 将数据集划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) # 定义支持向量机模型和k最近邻分类器模型 svm_model = SVC(kernel='linear', probability=True) knn_model = KNeighborsClassifier(n_neighbors=3) # 训练两个模型,并使用测试集进行评估 svm_model.fit(X_train, y_train) knn_model.fit(X_train, y_train) svm_pred = svm_model.predict(X_test) knn_pred = knn_model.predict(X_test) svm_acc = accuracy_score(y_test, svm_pred) knn_acc = accuracy_score(y_test, knn_pred) print("SVM accuracy: {:.2f}%".format(svm_acc * 100)) print("KNN accuracy: {:.2f}%".format(knn_acc * 100)) # 使用协同训练提高模型性能 svm_pred_train = svm_model.predict(X_train) knn_pred_train = knn_model.predict(X_train) X_train_new = np.hstack((X_train, svm_pred_train.reshape(-1, 1), knn_pred_train.reshape(-1, 1))) svm_model_new = SVC(kernel='linear', probability=True) knn_model_new = KNeighborsClassifier(n_neighbors=3) svm_model_new.fit(X_train_new, y_train) knn_model_new.fit(X_train_new, y_train) svm_pred_new = svm_model_new.predict(X_test) knn_pred_new = knn_model_new.predict(X_test) svm_acc_new = accuracy_score(y_test, svm_pred_new) knn_acc_new = accuracy_score(y_test, knn_pred_new) print("SVM-KNN accuracy: {:.2f}%".format(svm_acc_new * 100)) print("KNN-SVM accuracy: {:.2f}%".format(knn_acc_new * 100)) ``` 在上面的代码中,我们首先生成了一个二分类问题的数据集,并将其划分为训练集和测试集。然后,我们定义了两个分类器模型:支持向量机和k最近邻分类器,并对它们进行了训练和评估。接下来,我们使用两个模型对训练集进行预测,并将预测结果作为新特征与原特征合并,然后再使用这些新特征训练新的分类器模型。最后,我们使用测试集对新的模型进行评估,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值