项目实训写实记录No.4

数据特征选取

1.根据相关性进行选取

通过热力图观察特征之间的相似度,然后进行特征选取
如:这是三十个特征的热力图
从热力图上可以发现,radius_mean,perimeter_mean 和 area_mean 是相关的,因此我们仅使用 area_mean
compactness_mean, concavity_mean 和 concave points_mean 是两两相关的,因此我们只选取concavity_mean
radius_se,perimeter_se,area_se相关,仅选用area_se
radius_worst,perimeter_worst,area_worst相关,仅选用area_worst
compactness_worst,concavity_worst,concave points_worst相关,仅选用concavity_worst
compactness_se,concavity_se,concave points_se相关,仅选用concavity_se
texture_worst,texture_mean相关,仅选用texture_mean
area_worst,area_mean相关,仅选用area_mean
在这里插入图片描述
提取后十六个特征的热力图
在这里插入图片描述
代码为:
#观察所有特征的相关性
#Heatmap(热力图):将所有特征的成对相关系数以热力矩阵形式描述
#颜色越浅为相关性大的特征,如果相关性大则从中选取其中一个特征作为代表即可
#特征选择的目的是降维,用少量的特征代表数据的特性,这样也可以增强模型的泛化能力,避免数据过拟合
f,ax = plt.subplots(figsize=(18,18))
sns.heatmap(x.corr(),annot=True,linewidths=.5 , fmt = ‘.1f’,ax = ax)

需要导入的库:import seaborn as sns

2.根据swarm图来选取特征

在这里插入图片描述
可以清晰的看出第一个特征两种类别分布较好,更适合分类,而第二个特征则不适合分类。
代码为:

sns.set(style=“whitegrid” , palette=“muted”)
data_dia = y
data = x
data_n_2 = (data - data.mean()) / (data.std()) #归一化处理,便于展示 std()返回数据的标准差 mean()返回数据的平均值
#前十列属性 concave points_mean也适合分类
data = pd.concat([y , data_n_2.iloc[:,0:10]],axis=1)
print(“data的头:”)
print(data.head())
print(data.columns)
data=pd.melt(data,id_vars=“diagnosis”,var_name=“features”,value_name=“value”)
plt.figure(figsize=(10,10))
tic = time.time()
sns.swarmplot(x = “features” , y = “value” , hue=“diagnosis” , data = data)
plt.xticks(rotation = 90)

3.使用 SelectKBest单变量特征选择

通过卡方验证进行特征选择,通过卡方检验的得分来选择与类别(y)更加有关的特征
卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度
需要引入两个机器学习的库模型
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
代码为

#拆分数据
x_train,x_test,y_train,y_test = train_test_split(x_1,y,test_size=0.3,random_state=42) #random_state设置随机数种子
#2.单变量特征选择
select_feature = SelectKBest(chi2 , k = 5).fit(x_train,y_train)
print('Score list: ', select_feature.scores_)
print('Feature list: ’ , x_train.columns)
x_train_2 = select_feature.transform(x_train) #返回新的训练集
x_test_2 = select_feature.transform(x_test) #返回新的测试集

4.递归特征消除 (RFE)

RFE使用某一种分类方法(在我们的示例中是random forest),为每个特性分配权重,其绝对权重最小的则从当前特征集合中删除。该过程在修剪集上递归地重复,直到特征数量到达预设值
需要引入库模型from sklearn.feature_selection import RFE
代码为
clf_rf_3 = RandomForestClassifier()
rfe = RFE(estimator=clf_rf_3 , n_features_to_select=5 , step=1)
rfe = rfe.fit(x_train , y_train)
print(‘RF Chosen best 5 feature by rfe:’,x_train.columns[rfe.support_]

5.交叉验证递归特征消除(RFECV)

使用RFECV方法,不仅可以找到最佳特征,而且还可以找到需要多少个特征以获得最佳准确性
需要引入库模型from sklearn.feature_selection import RFECV
代码为:
clf_rf_4 = RandomForestClassifier()
rfecv = RFECV(estimator=clf_rf_4 , step=1 , cv = 5 , scoring=‘accuracy’) #5折交叉验证
rfecv = rfecv.fit(x_train,y_train)
print('Optimal number of features: ',rfecv.n_features_)
print('Best features: ',x_train.columns[rfecv.support_])
plt.figure()
plt.xlabel(“Number of features selected”)
plt.ylabel(“Cross validation score of number of selected features”)
plt.plot(range(1,len(rfecv.grid_scores_)+1),rfecv.grid_scores_)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值