然后,我们可以输出每个变量的分数(越大越好),并将每个变量的分数绘制为条形图,以了解应该选择多少个特征 。
for i in range(len(fs.scores_)): print('Feature %d: %f' % (i, fs.scores_[i]))# plot the scorespyplot.bar([i for i in range(len(fs.scores_))], fs.scores_)pyplot.show()将其与上一节中数据集的数据准备一起进行绑定,下面列出了完整的示例 。
from sklearn.datasets import make_regressionfrom sklearn.model_selection import train_test_splitfrom sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import f_regressionfrom matplotlib import pyplot# feature selectiondef select_features(X_train, y_train, X_test):# configure to select all featuresfs = SelectKBest(score_func=f_regression, k='all')# learn relationship from training datafs.fit(X_train, y_train)# transform train input dataX_train_fs = fs.transform(X_train)# transform test input dataX_test_fs = fs.transform(X_test)return X_train_fs, X_test_fs, fs# load the datasetX, y = make_regression(n_samples=1000, n_features=100, n_informative=10, noise=0.1, random_state=1)# split into train and test setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=1)# feature selectionX_train_fs, X_test_fs, fs = select_features(X_train, y_train, X_test)# what are scores for the featuresfor i in range(len(fs.scores_)):print('Feature %d: %f' % (i, fs.scores_[i]))# plot the scorespyplot.bar([i for i in range(len(fs.scores_))], fs.scores_)pyplot.show()首先运行示例将输出为每个输入特征和目标变量计算的分数 。
请注意,您的特定结果可能会有所不同 。尝试运行该示例几次 。
我们可以看到,某些变量的分数高于其他变量,而其他变量的分数则大得多,例如Feature 9的分数为101 。

文章插图
为每个输入特征创建一个特征重要性评分的条形图 。
该图清楚地表明8至10个特征比其他重要得多 。
在配置SelectKBest时,我们可以设置k=10来选择这些最重要的特征 。

文章插图
输入特征(x)与关联特征重要性(y)的条形图
(二)相关信息特征选择来自信息理论领域的相关信息是信息增益(通常用于决策树的构建)在特征选择中的应用 。
在两个变量之间计算相关信息,并在给定另一个变量的已知值的情况下测量一个变量的不确定性降低 。
考虑两个离散(分类或有序)变量(例如分类输入和分类输出数据)的分布时,相关信息很简单 。尽管如此,它仍可适用于数字输入和输出变量 。
scikit-learn库中的common_info_regression()函数通过数字输入和输出变量提供了用于信息选择的相关信息实现 。
与f_regression()一样,它可以用于SelectKBest特征选择策略(和其他策略)中 。
# configure to select all featuresfs = SelectKBest(score_func=mutual_info_regression, k='all')# learn relationship from training datafs.fit(X_train, y_train)# transform train input dataX_train_fs = fs.transform(X_train)# transform test input dataX_test_fs = fs.transform(X_test)return X_train_fs, X_test_fs, fs我们可以使用数据集上的相关信息来执行特征选择 。下面列出了使用相关信息进行数字特征选择的完整示例 。
from sklearn.datasets import make_regressionfrom sklearn.model_selection import train_test_splitfrom sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import mutual_info_regressionfrom matplotlib import pyplot # feature selectiondef select_features(X_train, y_train, X_test): # configure to select all features fs = SelectKBest(score_func=mutual_info_regression, k='all') # learn relationship from training data fs.fit(X_train, y_train) # transform train input data X_train_fs = fs.transform(X_train) # transform test input data X_test_fs = fs.transform(X_test) return X_train_fs, X_test_fs, fs # load the datasetX, y = make_regression(n_samples=1000, n_features=100, n_informative=10, noise=0.1, random_state=1)# split into train and test setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=1)# feature selectionX_train_fs, X_test_fs, fs = select_features(X_train, y_train, X_test)# what are scores for the featuresfor i in range(len(fs.scores_)): print('Feature %d: %f' % (i, fs.scores_[i]))# plot the scorespyplot.bar([i for i in range(len(fs.scores_))], fs.scores_)pyplot.show()【机器学习算法中如何执行回归数据的特征选择】首先运行示例将输出为每个输入特征和目标变量计算的分数 。请注意,您的特定结果可能会有所不同 。
推荐阅读
- 百度上线惊雷算法3.0
- 柳琴的正确学习方法
- 这才是你需要的C语言、C++学习路线
- 深度学习中的图像分割:方法和应用
- 《学习强国》怎么快速增分?
- 比RSA加密更快更安全的加密算法ECC
- 轻松理解机器学习算法:Adaboost算法
- 论淘宝搜索推荐算法排序机制及2021年搜索变化的方向
- 「算法」如何实现一个简易计算器
- 如何来学习旱冰?
