zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

整个机器学习入门框架以及机器学习预测股票市场例子-笔记海纳百川版

机器笔记学习框架入门 以及 预测 例子
2023-09-11 14:20:37 时间

整个机器学习入门框架以及机器学习预测股票市场例子-笔记海纳百川版

平时我们买股票的时候通常是看看他的各种参数指数,通常有各种指数去参考分析。同时各种K线无非也是各种数据的可视化,最后还是回归在数据身上。在机器学习中,我们就可以深度学习通过这些数据建立新的模型,让电脑帮你想,告诉你该选哪个的赚钱概率大。机器学习可以处理十几个的经济指数,同时你不需要掌握太多的经济知识,因为机器学习会学习出重要的特征。

我们这次就直接从股市软件直接倒出数据来分析,实时数据。基本上我们的普通的电脑可以处理50万数量级一下的机器学习,用在股市上搓搓有余,全部导出创业板一个月的股票或者倒出一个股票10年的信息都没有问题,这里我们就来分析一支股票。

那么我们先来总结出机器学习的整体知识框架,然后我们用一个股票的分析预测来再次熟悉这个框架

经典算法

1.K邻近算法
2.广义线性模型(线性回归、岭回归、套索回归)
3.朴素贝叶斯(贝努力朴素贝叶斯、高斯朴素贝叶斯、多项式朴素贝叶斯)
4.决策树与随机森林
5.SVM(多种核函数)
6.神经网络

数据预处理、降维、特征提取以及聚类

数据预处理

1.用StandardScaler数据处理
2.用MinMaxScaler数据处理
3.用RobustScaler数据处理
4.用Normalizer数据处理

数据降维

1.PCA降维

特征提取

1.PCA主成分分析法
2.非负矩阵分解

聚类算法

1.K均值聚类算法
2.凝聚聚类算法
3.DBSCAN算法

对特征进行加工

不同类型特征处理

1.哑向量转化
2.装箱处理

数据升维

1.向数据集添加交互式特征
2.多项式特征

不同的特征的选择

1.单一变量法
2.基于模型的特征选择
3.迭代式特征选择

模型评估

1.交叉验证法
2.网格搜索法
3.分类模型的可信度评估

建立算法的管道模型

1.模型选择
2.参数调优

好的,接下里我们来进入股票的分析预测小项目中。

基本的步骤

1.数据集的准备
2.数据处理
3.建立包含预处理和MLP模型的管道模型
4.向管道模型添加特征选择步骤
5.使用管道模型进行模型选择
6.使用管道模型寻找更优参数

股票涨幅进行分析

首先数据从哪里下载呢?我们直接点开随便一个股市软件,就可以到处这些数据。比如下面的这张图。在功能这里选择数据下载,也可以选择用一些网络的收集数据,链接在下面
http://dataju.cn/Dataju/web/datasetInstanceDetail/39
在这里插入图片描述

从股市软件或者其他途径下载的大多数是csv文件或者ecxel表格,可以把csv后缀改成ecxel,修改后再改回csv文件。下面是我下载一个股票的数据集。在这里插入图片描述

大概有十几个参数,这些参数都不是人工可以看出来的,用机器学习来处理非常方便。我们先来对数据进行处理一下,有一列-B股流通市值,这个全是N/A,我们读不出很多有用的数据,可以删掉,然后个别行有一些也可以删掉。删掉会不会有影响呢?非常小,就好像大海失去了一滴水,不会改变大海的体量。

完成这些后我们就开始训练模型了。值得注意的是因为每个人可以用不同的数据,所以出来结果都不太一样,所以这里就不给参考输出答案了。

#导入pandas,文件读取用
import pandas as pd
#这里是读入文件名,如果你的文件是文件中的,那么要写d:/文件夹/文件名这样的形式
stocks=pd.read_csv('300002.SZ.csv',encoding='gbk')
#给出我们的需要的特征,y是我们预测的涨幅
x=stocks.loc[:,'前收盘价(元)':'市现率'].values
y=stocks['涨跌幅(%)']
#这里你可以打印你的数据特征的数目和形态数目来确认下导入成功
print(x.shape,y.shape)

#导入这个make_pipeline来快速建立模型,用这个是因为这个更简洁
from sklearn.pipeline import make_pipeline
#导入神经网络和StandardScaler进行预处理
from sklearn.neural_network import MLPRegressor
from sklearn.preprocessing import StandardScaler
#这个只需要将要用到的模块导入管道就行
pipe=make_pipeline(StandardScaler(),MLPRegressor(random_state=38))
#这个打印是为了像大家展示管道模型建立的步骤,也可以不打印
print('\n',pipe.steps)
#进行交叉验证,给我们建立的模型打分
scores=cross_val_score(pipe,x,y,cv=3)
print('模型得分:{:.2f}'.format(scores.mean()))

好的这样子我们一个简单的模型就做出来了,虽然简答但是我的这个打分就要0.9,满分1.0,是相当不错的成绩了,但是我们发现,所有特征都被认为是同等的重要的,其实很多特征的更重要,有的反而不关要紧,那么我们接下来试一下特征选择

#导入特征选择模块
from sklearn.feature_selection import SelectFromModel 
#导入随机森岭
from sklearn.ensemble import RandomForertRegressor
#导入这个make_pipeline来快速建立模型,用这个是因为这个更简洁
from sklearn.pipeline import make_pipeline
#导入神经网络和StandardScaler进行预处理
from sklearn.neural_network import MLPRegressor
from sklearn.preprocessing import StandardScaler
 
 #我们这次把数据预处理、随机森岭、数据现在特征和神经网络都装进管道里面
pipe=make_pipeline(StandardScaler(),SelectFromModel(RandomForestRegressor(random_state=38)),MLPRegressor(random_state=38))
#交叉验证打分
score=cross_val_score(pipe,x,y,cv=3)
#打印分数
print('模型得分:{:.2f}'.format(scores.mean()))

#如果你想知道机器学习提取了那些特征,还可以打印出来
#使用管道模型拟合数据
pipe.fit(x,y)
#查询那些特征被选择
mask=pipe.named_steps['selectfrommodel'].get_support
#打印
print(mask)

这样子我们又完成了一次建模,这次我得到分数和上次没有差太多,这和数据本身有关,但是结构是得到了优化。那么刚才我们使用了神经网络和随机森岭,那么哪个模型更好呢

#定义参数字典,我们用管道看下哪个模型更好
params=[{'reg':[MLPRegressor(random_state=38)],'scaler':[StandardScaler(),None]},{'reg':[RandomForestRegressor(random_state=38)],'scaler':[None]}]
#下面对pipeline进行实例子化
pipe=Pipeline([('scaler',StandardScaler()),('reg',MLPRegressor())])
#进行网络搜索
grid=GridSearchCV(pipe,params,cv=3)
#拟合数据
grid.fit(x,y)
print('最好的模型是'.format(grid.best_params_))
print('模型最佳得分:{:.2f}'.format(grid.best_score_))

这样子我们就又完成了一次模型建立,我们可以看下知道哪个模型最好,那么如果这个模型最好,这个模型哪个参数会最合适呢

#我们可以看到这次的字典多了一行,多一行分别是神经网络的隐藏层和随机森岭中estimator的数量
params =[{'reg':[MLPRegressor(random_state=38)],'scaler':[StandardScaler(),None],'reg_hidden_layer_sizes':[(50,),(100,),(100,100)]},{'reg':[RandomForestRegressor(random_state=38)],'scaler':[None],'reg_n_estimators':[10,50,100]}]
#老样子,管道模型
pipe=Pipeline([('scaler',StandardScaler()),('reg',MPLRegressor())])
#网格搜索
grid=GridSearchCV(pipe,params,cv=3)
grid.fit(x,y)
print('最佳模型是:\n{}'.format(grid.best_params))
print('\n模型最佳的分是:{:.2f}'.format(grid.best_score_))

最后你就可以用最好的模型,模型最好的系数来建立一个模型了。

–参考资料
深入浅出python 机器学习 -段小手
机器学习算法原理与编程实践-郑捷
新加坡国立大学-课堂教学