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

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

2基于模型特征选择(SelectFromModel)


基于模型特征选择,使用sklearn.feature_selection.SelectFromModel类。我们用随机森林模型进行特征选择。

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestRegressor
Def selectFromModel():
stock =pd.read_csv('stock.csv',encoding='GBK')
y = stock['涨跌幅’]
features = stock.loc[:,'价格':'流通市值']
X = features.values
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)
sfm = SelectFromModel(estimator=RandomForestRegressor(n_estimators=100,random_state=38),threshold='median')
sfm.fit(X_train_scaled,y_train)
X_train_sfm =sfm.transform(X_train_scaled)                   
print('经过随机森林模型特征选择后的的数据形态:{}'.format(X_train_sfm.shape))
mask = sfm.get_support()
print(mask)


输出

经过随机森林模型进行特征后的的数据形态:(306, 8)
[FalseTrue False False False False True False False True True False True True True True]

image.png


27101113141516(涨跌幅、最高、成交额、换手、委比、振幅、市盈率、流通市值)数据被保留,1456781113(价格、5分钟涨跌额、今开、昨收、最高、最低、换手、委比)被抛弃。(由于threshold='median',所以也保留了50%的特征项)


#使用随机森林特征选择后数据集训练神经网络
       X_test_sfm =sfm.transform(X_test_scaled)
       mlp_sfm =MLPRegressor(random_state=62,hidden_layer_sizes=[100,200,100],alpha=0.1)
       mlp_sfm.fit(X_train_sfm,y_train)
print('经过随机森林模型特征选择后训练集得分:{:.2%}'.format(mlp_sfm.score(X_train_sfm,y_train)))
print('经过随机森林模型特征选择后测试集得分:{:.2%}'.format(mlp_sfm.score(X_test_sfm,y_test)))


输出

经过随机森林模型特征选择后训练集得分:96.75%
经过随机森林模型特征选择后测试集得分:97.31%


3迭代特征选择(RFE


特征项选择,使用sklearn.feature_selection.RFE类。

from sklearn.feature_selection import RFE
def elimination():
    stock =pd.read_csv('stock.csv',encoding='GBK')
    y = stock['涨跌幅']
    features = stock.loc[:,'价格':'流通市值']
    X = features.values
    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)
    rfe = RFE(RandomForestRegressor(n_estimators=100,random_state=38),n_features_to_select=8)
   rfe.fit(X_train_scaled,y_train)
    X_train_rfe =rfe.transform(X_train_scaled)
print('经过随机森林模型进行迭代特征选择后的的数据形态:{}'.format(X_train_rfe.shape))
mask = rfe.get_support()
print(mask)
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()


输出

经过随机森林模型进行迭代特征选择后的的数据形态:(306, 8)
[FalseTrue True False False False False False False True True True True True TrueFalse]

image.png


23101112131415(涨跌幅、涨跌额、成交额、换手、量比、委比、振幅、市盈率)数据被保留,145678916(价格、5分钟涨跌额、今开、昨收、最高、最低、成交量、流通市值)被抛弃。(由于n_features_to_select=8,所以也保留了8个的特征项)


 使用随机森林迭代特征选择后数据集训练随机森林
       X_test_rfe =rfe.transform(X_test_scaled)
       mlp_rfe =MLPRegressor(random_state=62,hidden_layer_sizes=[100,200,100],alpha=0.1)
       mlp_rfe.fit(X_train_rfe,y_train)
print('经过随机森林迭代特征选择后训练集得分:{:.2%}'.format(mlp_rfe.score(X_train_rfe,y_train)))
print('经过随机森林迭代特征选择后测试集得分:{:.2%}'.format(mlp_rfe.score(X_test_rfe,y_test)))


输出

经过随机森林迭代特征选择后训练集得分:96.64%
经过随机森林迭代特征选择后测试集得分:96.66%


4 综合


最后我们来比较一下三个特征选择的保留与舍弃项。

1价格

2涨跌幅

3涨跌额

4 5分钟涨跌额

5今开

6昨收

7最高

8最低

9成交量

10成交额

11换手

12量比

13委比

14振幅

15市盈率

16流通市值


单一变量

1

2

3

4

6

6

7

8

9

10

11

12

13

14

15

16

基于模型

1

2

3

4

6

6

7

8

9

10

11

12

13

14

15

16

迭代特征

1

2

3

4

6

6

7

8

9

10

11

12

13

14

15

16

综合

1

2

3

4

6

6

7

8

9

10

11

12

13

14

15

16


def summary():
stock =pd.read_csv('stock.csv',encoding='GBK')
y = stock['涨跌幅']
features = stock.loc[:,'价格':'流通市值']
X = features.values
clf_sp =SelectPercentile(percentile=50)
clf_sp.fit(X,y)
sp_masks =clf_sp.get_support()
clf_sfm =SelectFromModel(estimator=RandomForestRegressor(n_estimators=100,random_state=38),threshold='median')
clf_sfm.fit(X,y)
sfm_masks =clf_sfm.get_support()
clf_rfe =RFE(RandomForestRegressor(n_estimators=100,random_state=38),n_features_to_select=8)
clf_rfe.fit(X,y)
rfe_masks =clf_rfe.get_support()
merage_masks =[]
for sp_mask,sfm_mask,rfe_maskin zip(sp_masks,sfm_masks,rfe_masks):
merage = sp_maskand sfm_mask and rfe_mask
merage_masks.append(merage)    
i = 0
New_X =np.empty([X.shape[0],1])
for merage_mask in(merage_masks):
if merage_mask:
New_X = np.column_stack((X[:,i],New_X))
i = i+1
New_X=np.delete(New_X,0,1)
X_train, X_test,y_train, y_test = train_test_split(New_X, y, random_state=88)
scaler =StandardScaler()
scaler.fit(X_train)
X_train_scaled =scaler.transform(X_train)
X_test_scaled =scaler.transform(X_test)
mlp_merage =MLPRegressor(random_state=62,hidden_layer_sizes=[100,200,100],alpha=0.1)
mlp_merage.fit(X_train,y_train)
print('训练集得分:{:.2%}'.format(mlp_merage.score(X_train,y_train)))
print('测试集得分:{:.2%}'.format(mlp_merage.score(X_test,y_test)))


输出

训练集得分:36.97%
测试集得分:51.17%


合并以后结果并不理想


—————————————————————————————————


软件安全测试

https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486

接口自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486

DevOps 和Jenkins之DevOps

https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486

DevOps与Jenkins 2.0之Jenkins

https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486

Selenium自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486

性能测试第1季:性能测试基础知识

https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486

性能测试第2季:LoadRunner12使用

https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486

性能测试第3季:JMeter工具使用

https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486

性能测试第4季:监控与调优

https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486

Django入门

https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486

啄木鸟顾老师漫谈软件测试

https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486

目录
相关文章
|
9月前
|
存储 数据可视化 测试技术
一个测试工程师的实战笔记:我是如何在Postman和Apipost之间做出选择的?
优秀的API测试工具应该具备: 分层设计:既有可视化操作,也开放代码层深度定制 场景感知:自动识别加密需求推荐处理方案 协议包容:不强迫开发者为了不同协议切换工具 数据主权:允许自主选择数据存储位置
262 7
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
414 6
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
299 1
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
600 1
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
309 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
968 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
机器学习/深度学习 数据可视化 算法
机器学习中的特征选择与降维技术
机器学习中的特征选择与降维技术
430 0
|
机器学习/深度学习 数据采集 人工智能
自动化测试的未来:AI与机器学习的融合之路
【10月更文挑战第41天】随着技术的快速发展,软件测试领域正经历一场由人工智能和机器学习驱动的革命。本文将探讨这一趋势如何改变测试流程、提高测试效率以及未来可能带来的挑战和机遇。我们将通过具体案例分析,揭示AI和ML在自动化测试中的应用现状及其潜力。
289 0
|
1月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1152 6