【python】选择特征达成数据降维

使用特征选择的方式进行数据降维。
VT——方差选择法
首先计算每个特征的方差,对于未到阈值的方差特征做消除处理。

from sklearn import datasets
from sklearn.feature_selection import VarianceThreshold
iris = datasets.load_iris()
features = iris.data
target = iris.target
threshod = VarianceThreshold(threshold=.5)# 方差阈值
features_high_variance = threshod.fit_transform(features)
features_high_variance[0:3]

二进制
和普通数据相同,方差可以用 V a r ( x ) = p ( 1 − p ) Var(x)=p(1-p) Var(x)=p(1p)其中p是某一类的发生比例。可以将绝大多数观测都是一类的特性做删除处理。
高度相关特征
如果两个特征相关性很高,那么包含的信息也非常近似。

corr_matrix = dataframe.corr().abs()# 表示两个变量之间的相关性

# triu取上三角阵
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape),
                                  k=1).astype(np.bool_))
to_drop = [column for column in upper.columns if any(upper[column] > 0.95)]
print(dataframe.drop(dataframe.columns[to_drop], axis=1).head(3))# 删除

分类时无关特征
如果两个特征依赖性越高,则分类时越需要。
chi—square检测分类向量的独立性

iris = load_iris()
features = iris.data
target = iris.target
features = features.astype(int)

# chi2计算每个非负要素与类之间的卡方统计量,筛选出相关性较强的特征
chi2_selector = SelectKBest(chi2, k=2)# 筛选特征,k默认为选择10个
features_kbest = chi2_selector.fit_transform(features, target)

同理,也可以选择需要的特征的百分比。这里的实例由于定值,选择f-value的方法。

fvalue_selector = SelectPercentile(f_classif, percentile=75)

RFECV——递归消除
在上述特征删除的基础上,需要考虑留下多少特征。使用交叉验证法(CV-Cross Validation),如果删去一个特征后,整体模型提升则继续,反之则放回特征结束循环。

features, target = make_regression(n_samples=10000,
                                   n_features=100,
                                   n_informative=2,
                                   random_state=1)

ols = linear_model.LinearRegression()# 使用最小二乘法线性回归
rfecv = RFECV(estimator=ols, step=1, scoring="neg_mean_squared_error")
rfecv.fit(features, target)
print(rfecv.transform(features))

你可能感兴趣的:(机器学习,python,机器学习,sklearn)