赵走x博客
网站访问量:151574
首页
书籍
软件
工具
古诗词
搜索
登录
深入浅出Python机器学习:31、自动特征选择
深入浅出Python机器学习:30、数据“升维”
深入浅出Python机器学习:29、数据表达
深入浅出Python机器学习:28、聚类算法
深入浅出Python机器学习:27、特征提取
深入浅出Python机器学习:26、数据降维
深入浅出Python机器学习:25、数据预处理
深入浅出Python机器学习:24、神经网络实例一一手写识别
深入浅出Python机器学习:23、神经网络的原理及使用
深入浅出Python机器学习:22、神经网络的前世今生
深入浅出Python机器学习:21、SVM 实例一一波士顿房价回归分析
深入浅出Python机器学习:20、SVM 的核函数与参数选择
深入浅出Python机器学习:19、支持向量机SVM 基本概念
深入浅出Python机器学习:18、随机森林实例一一要不要和中目亲对象进一步发展
深入浅出Python机器学习:17、随机森林
深入浅出Python机器学习:16、决策树
深入浅出Python机器学习:15、朴素贝叶斯实战一一判断肿瘤是良性还是恶性
深入浅出Python机器学习:14、朴素贝叶斯算法的不同方法
深入浅出Python机器学习:13、朴素贝叶斯基本概念
深入浅出Python机器学习:12、使用L1 正则化的线性模型一一套索回归
深入浅出Python机器学习:11、使用L2 正则化的线性模型一一岭回归
深入浅出Python机器学习:10、最基本的线性模型一一线性回归
深入浅出Python机器学习:9、线性模型的墓本概念
深入浅出Python机器学习:8、K 最近邻算法项目实战一一酒的分类
深入浅出Python机器学习:7、K最近邻算法用于回归分析
深入浅出Python机器学习:6、K最近邻算法处理多元分类任务
深入浅出Python机器学习:5、k最近邻算法在分类任务中的应用
深入浅出Python机器学习:4、K 最近邻算法的原理
深入浅出Python机器学习:3、一些必需库的安装及功能简介
深入浅出Python机器学习:2、基于python i吾言的环境配置
深入浅出Python机器学习:1、概述
人脸数据集加载faces = fetch_lfw_people()报错
31、直方图
74、插件开发:Android端API实现
Python3之socket编程--3:基于UDP的套接字
15、使用 jQuery 处理 Ajax 请求
深入浅出Python机器学习:31、自动特征选择
资源编号:75939
人工智能
深入浅出Python机器学习
热度:117
在经过前面两个小节的学习后,我们己经掌握了如何对低维数据集扩充特征的方法。但是在纷繁复杂的特征当中,有一些对于模型预测结果的影响比较大,而有一些重要性相对较低,本节我们将讨论如何使用scikit-learn进行自动特征选择。
在经过前面两个小节的学习后,我们己经掌握了如何对低维数据集扩充特征的方法。但是在纷繁复杂的特征当中,有一些对于模型预测结果的影响比较大,而有一些重要性相对较低,本节我们将讨论如何使用scikit-learn进行自动特征选择。 # 1、 使用单一变量法进行特征选择 有一定统计学基础的读者朋友可能了解,在统计学中,我们会分析在样本特征和目标之间是否会有明显的相关性。在进行统计分析的过程中,我们会选择那些置信度最高的样本特征来进行分析。当然这只适用于样本特征之间没有明显关联的情况, 也就是大家常说的单一变量法( univariate )。 举个例子, 在市场营销中,玩具厂商更关注目标人群的年龄,不同年龄段的儿童对于玩具的需求是不相同的,所以厂商更倾向于根据年龄来细分市场,并且进行产品设计。 而小额贷款公司更关心客户的偿债能力,因此会将目标客户的收入情况作为更重要的特征。在这种情况下,有些不是那么重要的特征就会被剔除。这种方法的优点是计算量较小,而且不需要建模,只用基本的方差分析就可以实现了。 在scikit-learn 中, 有若干种方法可以用来进行特征选择,其中最简单的两种是SelectPercentile 和SelectKBest , 其中SelectPercentile 是自动选择原始特征的百分比,例如原始数据的特征数是2 00 个,那么SelectPercentile 的pecentile 参数设置为50 , 就会选择100 个原始特征中的50% ,即100 个,而SelectKBest 是自动选择K 个最重要的特征。 下面我们用一个非常剌激的数据集来做个实验。说这个数据集剌激,是因为它是来自中国股市。我们用证券交易软件导出了当日全部A 股股票的交易数据,保存成为了一个csv 文件, 并且去掉了无效数据。下面我们试着用这个数据集训练一个机器学习模型。 在Jupyter Notebook 中输入代码如下: ``` # 导人pandas import pandas as pd # 读取股票数据集 stock=pd.read_csv('test.csv',encoding='GBK') # 打印结果 print(stock . head()) ``` 运行代码,会得到如图10-1 8 所示的结果。 运行结果:  [结果分析]从结果中可以看到,这个csv 文件中包括43 列,分别对应股票的代码、名称、涨幅(以百分比表示〉、现价、涨跌、买价、卖价等信息。 我们的目标是通过回归分析,预测股票的涨幅(负数表示跌幅〉。所以target 是“涨幅”这一列,输入代码如下: ``` # 设置回归分析的目标为涨幅 y = stock['涨幅%%'] # 打印结果 print(y .shape) print(y[0]) ``` 运行代码,会得到如图10-19 所示的结果。 ``` (3421,) -2.53 ``` 图10-19 y 的数据形态和第一个样本的数值 [结果分析] 结果表示,我们一共有3 421 个样本,而第一个样本,也就是名称为“平安银行” 的股票, 当日的涨幅为-2 . 53% 。这说明我们指定target 成功。 接下来要指定样本的特征,输入代码如下: ``` # 提取特征值 features=stock.loc[:,'现价':'流通股(亿)'] X = features.values # 打印结果 print(X.shape) print(X[:1]) ``` 运行代码,会得到如图10-20 所示的结果。  [结果分析}从结果我们看到,样本特征一共有23 个,即从“现价” 一直到“流通股(亿)”这一列。下面的数组是第一个样本的全部特征值,这里我们看到特征值之间的数量级差别比较大,从e 的- 2 次方到8 次方,这样的话,我们在训练模型之前, 需要用scikit-learn的预处理模块进行一下数据缩放。 这里我们选择使用StandardScaler 。在Jupyter Notebook 中输入代码如下: #导人数据集拆分工具 from sklearn . model selection import train test split #导入StandardScaler from sklearn.preprocessing import StandardScaler #设置神经网络隐藏层参数和alpha 参数 mlpr=MLPRegressor(random_state=62 , hidden_layer_sizes=(l00,100) , alpha=0.001) 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) #训练神经网络 ml pr . fit (X_ train_ scaled , y _train) #打印模型分数 print (’模型准确率。{: .2f } ' . format(mlpr . score(X_test_scaled,y_test))) 运行代码,会得到模型的预测准确率如图10 -21 所示。 模型准确:t¥: 0.93 图10-21 模型准确率为0.93 [结果分析]我们看到,用神经网络对A 股涨幅进行回归分析,模型的预测准确率 达到了93% ,可以说是一个可以接受的成绩。 下面我们列出那些涨幅大于或等于10% 的股票,输入代码如下: #列出涨幅大于或等子”的股票 wanted = stock.lac [:,’名称『] print(wanted[y>=lO])