python - 如何评估每对变量的 KNN 分类器?
问题描述
我曾经permutatation_importance
找到最重要的值
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
from sklearn.inspection import permutation_importance
columns=['progresion', 'tipo']
X = df_cat.drop(columns, axis = 1)
y = df_cat['progresion']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state = 42)
knn = KNeighborsClassifier()
knn.fit(X_train,y_train)
results = permutation_importance(knn, X, y, scoring='accuracy')
importance = results.importances_mean
for i,v in enumerate(importance):
print('Feature: %0d, Score: %.5f' % (i,v))
但我想做的是评估每对变量的 KNN 分类器,以找出哪对变量更相关,从而实现更好的模型性能。
解决方案
kNN 对每个自变量(特征)的偏好相同。这使得使用 kNN 隔离特征或为其分配不同的权重变得非常困难。
此外,由于 kNN 是一种非参数算法(它不会基于数据做出任何假设),与朴素贝叶斯不同,您无法基于特征获得任何有意义的概率输出。
在这种情况下,我建议看一下基于决策树的算法,例如随机森林,它们本质上具有 feature_importance_ 作为 scikit-learn 中的内置类。这将使您在实施模型后了解每个功能的重要性。
这里有一个很好的例子: https ://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_importances.html
此处还有 RF feature_importance_ 部分: 随机森林 feature_importances_
如果您真的想违背传统智慧并使用 kNN 算法识别特征重要性,一种选择可以是构建具有不同特征的模型,然后比较整体准确度。
我知道这可能会或可能不会直接解决您的问题。但这是我此刻想到的。也许会有与我不同角度的其他答案。
推荐阅读
- python - Python FTP:“TimeoutError:[Errno 110] 连接超时”但我可以在终端中使用 sftp 连接
- python - 弹出故障没有找到目录?
- mysql - Mysql 正在寻找更多,估计行,然后是预期
- android - 使用 Log for Volley Post 方法
- javascript - 在 d3 条形图中自定义网格线
- python - ModuleNotFoundError:没有名为“projeler_ile_python”的模块
- javascript - 如果我从服务器请求数据,“ComponentDidMount”钩子会触发内存泄漏
- python-3.x - 从 python 生成 Faker 数据并将其加载到 BigQuery 嵌套表中
- c - 编码/解码程序的逻辑错误 (C)
- javascript - 克隆和换行时如何防止单词溢出?