我们可以看到许多特征的分数为0.0,而这已经确定了许多可能与目标有关的特征 。

文章插图
为每个输入特征创建一个特征重要性评分的条形图 。
与相关特征选择方法相比,我们可以清楚地看到更多的特征被标记为相关 。这可能是由于我们在其构造中添加到数据集中的统计噪声 。

文章插图
输入特征(x)与相关信息特征重要性(y)的条形图
既然我们知道如何针对回归预测建模问题对数字输入数据执行特征选择,那么我们可以尝试使用选定的特征开发模型并比较结果 。
三、使用选定特征建模有许多不同的技术可用来对特征评分和根据分数选择特征 。您怎么知道要使用哪个?
一种可靠的方法是使用不同的特征选择方法(和特征数量)评估模型,然后选择能够产生最佳性能的模型的方法 。
在本节中,我们将评估具有所有特征的线性回归模型,并将其与根据相关统计选择的特征和通过互信息选择的特征构建的模型进行比较 。
线性回归是测试特征选择方法的良好模型,因为如果从模型中删除了不相关的特征,则线性回归性能会更好 。
(一)使用所有特征构建的模型第一步,我们将使用所有可用特征来评估LinearRegression模型 。
该模型适合训练数据集,并在测试数据集上进行评估 。
下面列出了完整的示例 。
from sklearn.datasets import make_regressionfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_absolute_error# 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)# fit the modelmodel = LinearRegression()model.fit(X_train, y_train)# evaluate the modelyhat = model.predict(X_test)# evaluate predictionsmae = mean_absolute_error(y_test, yhat)print('MAE: %.3f' % mae)运行示例将在训练数据集上输出模型的平均绝对误差(MAE) 。由于学习算法的随机性,结果可能会有所不同 。
在这种情况下,我们可以看到该模型实现了约0.086的误差 。

文章插图
(二)使用相关特征构建的模型我们可以使用相关方法对特征进行评分,然后选择10个最相关的特征 。
下面的select_features()函数已更新以实现此目的 。
# feature selectiondef select_features(X_train, y_train, X_test): # configure to select a subset of features fs = SelectKBest(score_func=f_regression, k=10) # 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下面列出了使用此特征选择方法评估线性回归模型拟合和对数据进行评估的完整示例 。from sklearn.datasets import make_regressionfrom sklearn.model_selection import train_test_splitfrom sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import f_regressionfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_absolute_error # feature selectiondef select_features(X_train, y_train, X_test):# configure to select a subset of featuresfs = SelectKBest(score_func=f_regression, k=10)# 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)# fit the modelmodel = LinearRegression()model.fit(X_train_fs, y_train)# evaluate the modelyhat = model.predict(X_test_fs)# evaluate predictionsmae = mean_absolute_error(y_test, yhat)print('MAE: %.3f' % mae)该示例仅报告了使用相关统计数据选择的100个输入特征中的10个的模型性能 。在这种情况下,我们看到该模型实现了约2.7的误差分,这比使用所有特征并获得0.086的MAE的基线模型要大得多 。
这表明,尽管该方法对选择哪些特征有很强的想法,但是仅从这些特征构建模型并不能带来更熟练的模型 。这可能是因为对目标很重要的特征被忽略了 。
推荐阅读
- 百度上线惊雷算法3.0
- 柳琴的正确学习方法
- 这才是你需要的C语言、C++学习路线
- 深度学习中的图像分割:方法和应用
- 《学习强国》怎么快速增分?
- 比RSA加密更快更安全的加密算法ECC
- 轻松理解机器学习算法:Adaboost算法
- 论淘宝搜索推荐算法排序机制及2021年搜索变化的方向
- 「算法」如何实现一个简易计算器
- 如何来学习旱冰?
