from sklearn.feature_selection import VarianceThreshold,SelectKBest,chi2
from sklearn.datasets import load_iris
import pandas as pd
X,y = load_iris(return_X_y=True)
X_df = pd.DataFrame(X,columns=list("ABCD"))
(chi2,pval) = chi2(X_df,y)
dict_feature = {}
for i,j in zip(X_df.columns.values,chi2):
dict_feature[i]=j
#对字典按照values排序
ls = sorted(dict_feature.items(),key=lambda item:item[1],reverse=True)
#特征选取数量
k =2
ls_new_feature=[]
for i in range(k):
ls_new_feature.append(ls[i][0])
X_new = X_df[ls_new_feature]
from sklearn.feature_selection import VarianceThreshold,SelectKBest,chi2
from sklearn.datasets import load_iris
import pandas as pd
from sklearn.feature_selection import mutual_info_classif
#用于度量特征和离散目标的互信息
X,y = load_iris(return_X_y=True)
X_df = pd.DataFrame(X,columns=list("ABCD"))
feature_cat = ["A","D"]
discrete_features = []
feature = X_df.columns.values.tolist()
for k in feature_cat:
if k in feature:
discrete_features.append(feature.index(k))
mu = mutual_info_classif(X_df,y,discrete_features=discrete_features,
n_neighbors=3, copy=True, random_state=None)
dict_feature = {}
for i,j in zip(X_df.columns.values,mu):
dict_feature[i]=j
#对字典按照values排序
ls = sorted(dict_feature.items(),key=lambda item:item[1],reverse=True)
#特征选取数量
k =2
ls_new_feature=[]
for i in range(k):
ls_new_feature.append(ls[i][0])
X_new = X_df[ls_new_feature]
from sklearn.datasets import load_iris
import pandas as pd
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
X,y = load_iris(return_X_y=True)
X_df = pd.DataFrame(X,columns=list("ABCD"))
sf = SelectFromModel(estimator=LogisticRegression(penalty="l1", C=0.1),
threshold=None,
prefit=False,
norm_order=1)
sf.fit(X_df,y)
X_new = X_df[X_df.columns.values[sf.get_support()]]
from sklearn.feature_selection import VarianceThreshold
from sklearn.datasets import load_iris
import pandas as pd
X,y = load_iris(return_X_y=True)
X_df = pd.DataFrame(X,columns=list("ABCD"))
#建议作为数值特征的筛选方法,对于分类特征可以考虑每个类别的占比问题
ts = 0.5
vt = VarianceThreshold(threshold=ts)
vt.fit(X_df)
#查看各个特征的方差
dict_variance = {}
for i,j in zip(X_df.columns.values,vt.variances_):
dict_variance[i] = j
#获取保留了的特征的特征名
ls = list()
for i,j in dict_variance.items():
if j >= ts:
ls.append(i)
X_new = pd.DataFrame(vt.fit_transform(X_df),columns=ls)