机器学习测试笔记(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%


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

目录
相关文章
|
2月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
666 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
2月前
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
106 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
112 1
|
2月前
|
人工智能 算法 测试技术
自动化测试项目实战笔记(二):解决验证码识别问题
这篇文章介绍了三种自动化测试中验证码识别的方法:使用Python的pytesseract和PIL模块、利用第三方API如万维易源,以及使用开源的ddddocr库,还提到了一些注意事项,比如如何获取验证码区域的截图。
82 2
|
2月前
|
机器学习/深度学习 计算机视觉 Python
模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数
本文介绍了网格搜索(Grid Search)在机器学习中用于优化模型超参数的方法,包括定义超参数范围、创建参数网格、选择评估指标、构建模型和交叉验证策略、执行网格搜索、选择最佳超参数组合,并使用这些参数重新训练模型。文中还讨论了GridSearchCV的参数和不同机器学习问题适用的评分指标。最后提供了使用决策树分类器进行网格搜索的Python代码示例。
107 1
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
71 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
122 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
243 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
62 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
测试技术 数据安全/隐私保护 Python
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)
本文介绍了使用Selenium进行自动化测试时如何测试用户登录的不同情况,包括账号密码错误、登录成功以及处理登录时出现的弹框,并提供了相应的Python代码实现。
75 0
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)