用于回归或分类的特征



有没有办法确定哪些功能与我的机器学习模型最相关。如果我有 20 个功能,是否有一个函数可以决定我应该使用哪些功能(或自动删除不相关的功能的功能(?我计划为回归或分类模型执行此操作。

我想要的输出是最相关的值列表和预测

import pandas as pd
from sklearn.linear_model import LinearRegression
dic = {'par_1': [10, 30, 11, 19, 28, 33, 23],
       'par_2': [1, 3, 1, 2, 3, 3, 2],
       'par_3': [15, 3, 16, 65, 24, 56, 13],
       'outcome': [101, 905, 182, 268, 646, 624, 465]}
df = pd.DataFrame(dic)
variables = df.iloc[:,:-1]
results = df.iloc[:,-1]
print(variables.shape)
print(results.shape)

reg = LinearRegression()
reg.fit(variables, results)
x = reg.predict([[18, 2, 21]])[0]
print(x)

您正在寻找的术语是特征选择:它包括确定哪些特征与您的分析最相关。scikit-learn图书馆在这里有一整节专门介绍它。

另一种可能性是诉诸降维技术,如PCA(主成分分析(或随机投影。每种技术都有其优点和缺点,因此很大程度上取决于您拥有的数据和特定的应用程序。

您可以访问reg对象的 coef_ 属性:

print(reg.coef_)

称这些权重过于简单化,因为它们在线性回归中具有特定的含义。但它们就是你所拥有的。

使用线性模型时,使用线性独立特征非常重要。您可以使用df.corr()可视化相关性:

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.decomposition import PCA
from sklearn.metrics import mean_squared_error
numpy.random.seed(2)
dic = {'par_1': [10, 30, 11, 19, 28, 33, 23],
       'par_2': [1, 3, 1, 2, 3, 3, 2],
       'par_3': [15, 3, 16, 65, 24, 56, 13],
       'outcome': [101, 905, 182, 268, 646, 624, 465]}
df = pd.DataFrame(dic)
print(df.corr())
out:
            par_1     par_2     par_3   outcome
par_1    1.000000  0.977935  0.191422  0.913878
par_2    0.977935  1.000000  0.193213  0.919307
par_3    0.191422  0.193213  1.000000 -0.158170
outcome  0.913878  0.919307 -0.158170  1.000000

您可以看到par_1par_2密切相关。如@taga所述,您可以使用PCA将要素映射到线性独立的低维空间:

variables = df.iloc[:,:-1]
results = df.iloc[:,-1]
pca = PCA(n_components=2)
pca_all = pca.fit_transform(variables)
print(np.corrcoef(pca_all[:, 0], pca_all[:, 1]))
out:
[[1.00000000e+00 1.87242048e-16]
 [1.87242048e-16 1.00000000e+00]]

请记住在样本外数据上验证模型:

X_train = variables[:4]
y_train = results[:4]
X_valid = variables[4:]
y_valid = results[4:]
pca = PCA(n_components=2)
pca.fit(X_train)
pca_train = pca.transform(X_train)
pca_valid = pca.transform(X_valid)
print(pca_train)
reg = LinearRegression()
reg.fit(pca_train, y_train)
yhat_train = reg.predict(pca_train)
yhat_valid = reg.predict(pca_valid)
print(mean_squared_error(yhat_train, y_train))
print(mean_squared_error(yhat_valid, y_valid))

功能选择并非易事:有很多 sklearn 模块可以实现它(参见文档(,您应该始终尝试至少其中的几个,看看哪些模块可以提高样本外数据的性能。

好吧,最初我遇到了同样的问题。我发现对选择相关功能有用的两种方法是这些。

1.您可以使用模型的特征重要性属性获取数据集每个特征的特征重要性。功能重要性是基于树的分类器附带的内置类。

import pandas as pd
import numpy as np
data = pd.read_csv("D://Blogs//train.csv")
X = data.iloc[:,0:20]  #independent columns
y = data.iloc[:,-1]    #target column i.e price range
from sklearn.ensemble import ExtraTreesClassifier
import matplotlib.pyplot as plt
model = ExtraTreesClassifier()
model.fit(X,y)
print(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers
#plot graph of feature importances for better visualization
feat_importances = pd.Series(model.feature_importances_, index=X.columns)
feat_importances.nlargest(10).plot(kind='barh')
plt.show()

点击查看图片

2.带热图的相关矩阵

相关性声明要素如何相互关联或与目标变量相关。它直观地说明了特征如何与目标变量相关联。

点击查看图片

这不是我的研究,

而是这个博客功能选择,它有助于消除我的疑虑,我相信也会做你的研究:)

最新更新