使用交叉验证调整kNN算法的参数

我在使用机器学习算法kNN,而不是将数据集分为66.6%用于训练和33.4%用于测试,我需要使用以下参数进行交叉验证:K=3, 1/euclidean

K=3 没有疑问,我只需在代码中添加:

Classifier = KNeighborsClassifier(n_neighbors=3, p=2, metric='euclidean') 

问题就解决了。但我不理解的是1/euclidean,以及如何将其应用到代码中?

import pandas as pdimport timefrom sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.model_selection import cross_val_scorefrom sklearn import metricsdef openfile():   df = pd.read_csv('Testfile - kNN.csv')   return dfdef main():   start_time = time.time()   dataset = openfile()   X = dataset.drop(columns=['Label'])   y = dataset['Label'].values   X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)   Classifier = KNeighborsClassifier(n_neighbors=3, p=2, metric='euclidean')   Classifier.fit(X_train, y_train)   y_pred_class = Classifier.predict(X_test)   score = cross_val_score(Classifier, X, y, cv=10)   y_pred_prob = Classifier.predict_proba(X_test)[:, 1]   print("accuracy_score:", metrics.accuracy_score(y_test, y_pred_class),'\n')   print("confusion matrix")   print(metrics.confusion_matrix(y_test, y_pred_class),'\n')   print("Background precision score:", metrics.precision_score(y_test, y_pred_class, labels=['background'], average='micro')*100,"%")   print("Botnet precision score:", metrics.precision_score(y_test, y_pred_class, labels=['bot'], average='micro')*100,"%")   print("Normal precision score:", metrics.precision_score(y_test, y_pred_class, labels=['normal'], average='micro')*100,"%",'\n')   print(metrics.classification_report(y_test, y_pred_class, digits=2),'\n')   print(score,'\n')   print(score.mean(),'\n')   print("--- %s seconds ---" % (time.time() - start_time))

回答:

您可以创建自己的函数,并将其作为可调用对象传递给metric参数。

创建如下所示的函数:

from scipy.spatial import distancedef inverse_euc(a,b):    return 1/distance.euclidean(a, b)

现在将其作为callable在您的KNN函数中使用:

Classifier = KNeighborsClassifier(algorithm='ball_tree',n_neighbors=3, p=2, metric=inverse_euc)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注