机器学习测试笔记(26)——自动特征选择(上)

简介: 机器学习测试笔记(26)——自动特征选择(上)

自动特征选择包括:单一变量法(univariate)、基于模型特征选择(SelectFromModel)和迭代特征选择(RFE


1单一变量法(univariate)


我们从网易财经频道下载股票交易数据,通过下面代码进行处理。

def dealdata(mydata):
if str(mydata)[-1]=='%':
try:
return(float(str(mydata)[:-1])/100)
except:
return mydata
elif str(mydata)[-1]=='万':
try:
            returnfloat(str(mydata)[:-1])*10000
except:
return mydata
elif str(mydata)[-1]=='亿':
try:
            returnfloat(str(mydata)[:-1])*100000000
except:
return mydata
else:
return mydata     
def dealcsv():
       stock =pd.read_csv('000002.csv',encoding='GBK')
       new_stock = stock.applymap(dealdata)
       print(new_stock.head())
       new_stock.to_csv('stock.csv',encoding='GBK')


我们用处理好的stock.csv作为本文的学习数据。首先我们用pd.read_csv读取csv数据。

from sklearn.preprocessing import StandardScaler
def stock():
    stock =pd.read_csv('stock.csv',encoding='GBK')
    print(stock.head())


输出

编号   序号      代码    名称 ...          总市值 每股收益           净利润           主营收
0   0  1401 600136  当代文体 ...   3397000000 -3.34-1.299000e+09  4.110000e+08
1   1  1402 688668  鼎通科技 ...   2212000000  0.88 5.408000e+07  2.700000e+08
2   2  1403 688008  澜起科技 ...  95500000000  0.95 8.780000e+08  1.468000e+09
3   3  1404 603916   苏博特 ...   8651000000  1.30 3.020000e+08  2.451000e+09
4   4  1405 600277  亿利洁能 ...   7395000000  0.13 2.250000e+08  8.683000e+09
[5rows x 24 columns]


设置目标值为

#设置目标为“涨跌幅”
y = stock['涨跌幅']
print(y.shape)
print(y[0])


输出

(408,)
-0.0252


获取408条数据,'涨跌幅'列第一个数据为:-0.0252

#提取特征值为“价格”到“流通市值”


features = stock.loc[:,'价格':'流通市值']
X = features.values
print(X.shape)
print(X[1])


输出


(408, 16)
[ 2.594e+01 -2.520e-02 -6.700e-01 0.000e+00  2.661e+01  2.661e+01
  2.670e+01  2.593e+01 6.581e+03  1.721e+07  3.380e-02 9.800e-01
  3.226e-01 2.890e-02  2.950e+01  5.020e+08]


408条数据,提取16个特征项。接下来我们用进行MLPRegressor拟合


mlp =MLPRegressor(random_state=62,hidden_layer_sizes=[100,200,100],alpha=0.1)
X_train, X_test,y_train, y_test = train_test_split(X, y, random_state=62)
#预处理
scaler =StandardScaler()
scaler.fit(X_train)
X_train_scaled =scaler.transform(X_train)
X_test_scaled =scaler.transform(X_test)
mlp.fit(X_train_scaled,y_train)
print('训练集得分:{:.2%}'.format(mlp.score(X_train_scaled,y_train)))
print('测试集得分:{:.2%}'.format(mlp.score(X_test_scaled,y_test)))


输出

训练集得分:96.12%
测试集得分:92.84%


注意:这里的random_state,hidden_layer_sizes,alpha并不一定固定的,你需要根据自身数据,调整到最优解。


我们获取涨幅>=0.05的企业名称。

wanted = stock.loc[:,'名称']
print(wanted[y>=-0.05])


输出


0      当代文体
1      鼎通科技
2      澜起科技
3       苏博特
4      亿利洁能
...
362    盟升电子
363    青海春天
364    瀚蓝环境
365    华润微
366    ST亚星
Name:名称, Length: 367, dtype:object


单一变量法,使用sklearn.feature_selection.SelectPercentile

from sklearn.feature_selection import SelectPercentile
select = SelectPercentile(percentile=50)
select.fit(X_train_scaled,y_train)
X_train_selected = select.transform(X_train_scaled)
print('经过缩放后的形态:{}'.format(X_train_scaled.shape))
print('特征选择后的形态:{}'.format(X_train_selected.shape))


输出

经过缩放后的形态:(306, 16)
特征选择后的形态:(306, 8)


由于参数percentile=5016个特征项成为了8个,50%被过滤掉了。通过布尔数组与图像来显示哪些数据被过滤,哪些数据没有被过滤


mask = select.get_support()
print(mask)
#用图像表示单一变量法特征选择结果
plt.matshow(mask.reshape(1,-1),cmap=plt.cm.cool)
plt.xlabel(u"特征选择")
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.show()


输出


[False True True False False False False False True TrueFalse True False True True True]


image.png


2391012141516(涨跌幅、涨跌额、成交量、成交额、量比、振幅、市盈率、流通市值)数据被保留,1456781113(价格、5分钟涨跌额、今开、昨收、最高、最低、换手、委比)被抛弃。

使用特征选择后数据集训练神经网络。


X_test_selected= select.transform(X_test_scaled)
       mlp_select = MLPRegressor(random_state=62,hidden_layer_sizes=[100,200,100],alpha=0.1)
       mlp_select.fit(X_train_selected,y_train)
print('单一变量法特征选择后训练集得分:{:.2%}'.format(mlp_select.score(X_train_selected,y_train)))
print('单一变量法特征选择后测试集得分:{:.2%}'.format(mlp_select.score(X_test_selected,y_test)))


输出

单一变量法特征选择后训练集得分:96.46%
单一变量法特征选择后测试集得分:96.24%


噪音多得分上升,否则下降,所以适合噪音多数据(如本文的数据)

目录
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 算法
机器学习-特征选择:如何用信息增益提升模型性能?
机器学习-特征选择:如何用信息增益提升模型性能?
45 1
|
4天前
|
索引 机器学习/深度学习 Python
|
4天前
|
机器学习/深度学习 算法框架/工具 PyTorch
|
机器学习/深度学习 算法 计算机视觉
|
4天前
|
机器学习/深度学习 索引 Python
|
4天前
|
机器学习/深度学习 数据挖掘 Python
|
4天前
|
机器学习/深度学习 Python 索引
|
27天前
|
iOS开发
iOS自动混淆测试处理笔记
iOS自动混淆测试处理笔记
11 0
|
1月前
|
机器学习/深度学习 自然语言处理 算法
【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法
【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法
50 0
|
1月前
|
机器学习/深度学习 数据采集 Python
【机器学习】包裹式特征选择之基于模型的特征选择法
【机器学习】包裹式特征选择之基于模型的特征选择法
42 0

热门文章

最新文章