机器学习——特征选择

一、读取数据

0、导入一些必需的包

import pandas as pd
import numpy as np

1、加载本地数据

data = pd.read_excel('./L_roudoukou_data_LSTM_CNN.xlsx', index_col=0, nrows=5)

2、检查数据是否包含缺失值

print(np.isnan(df).any())       # L12输出True,说明数据里有空值,用0填充。

3、分配标签和特征

names = ['label', 'L1', 'L2', 'L3', 'L4', 'L5', 'L6', 'L7', 'L8', 'L9', 'L10', 'L11', 'L12']
dataframe = pd.read_csv("./L_roudoukou_data_LSTM_CNN.csv", names=names)  # 读取数据集
dataframe.head()
array = dataframe.values
**注:不要选到标签栏,否则XY就会包含字符串类型,后面无法计算。**
X = array[1:, 1:13]  # 选取前1~13列为特征变量,就是要筛选的特征。
Y = array[1:, 0]  # 选取label为目标变量,就是标签。
# print(X[0:5, :])    # 打印前5行特征
# print(Y[0:5])    # 打印前5行标签

在这里插入图片描述

二、特征选择

1. 过滤方法

1.1. 信息增益(mutual_info_classif互信息)

from sklearn.feature_selection import mutual_info_classif
import matplotlib.pyplot as plt
importances = mutual_info_classif(X, Y)
feat_importances = pd.Series(importances, df.columns[0:len(df.columns)-1])
feat_importances.plot(kind='barh', color='teal')
plt.savefig('./mutual_info_classif.png')
plt.show()
plt.close()

在这里插入图片描述

2. 包装方法

2.1 递归特征消除法,

# from sklearn.feature_selection import RFE   # 导入RFE库
# from sklearn.linear_model import LogisticRegression     # 导入逻辑回归库
# model = LogisticRegression()    # 设置算法为逻辑回归
# rfe = RFE(model, 5)  # 选择5个最佳特征变量,并进行RFE
# fit = rfe.fit(X, Y)     # 进行RFE递归
# print(fit.n_features_)  # 打印最优特征变量数
# print(fit.support_)  # 打印选择的最优特征变量
# # print(fit.ranking_)     # 特征消除排序

这里输出[False False False False False True False True True False True True],说明L6,L8,L9,L11,L12,比较好。

3. 嵌入方法

3.1 基于树模型的特征选择,

from sklearn.ensemble import ExtraTreesClassifier   # 导入ExtraTrees
model = ExtraTreesClassifier()  # 设置ExtraTrees
model.fit(X, Y)
print(model.feature_importances_)   # 得到特征变量的重要性值

输出[0.08752002 0.08456882 0.09494643 0.05386247 0.05954704 0.14586148
0.05104781 0.05556901 0.11572619 0.06029772 0.06241888 0.12863414],从高到低:L6\L12\L9\L3\L1\L2\L11\L10\L5\L8\L4\L7。

三、总结

三种方法比较后,L6最好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值