5分快3注册_以预测股票涨跌案例入门基于SVM的机器学习

  • 时间:
  • 浏览:1
  • 来源:湖北生活网_湖北人的网上生活家园

    SVM是Support Vector Machine的缩写,中文叫支持向量机,通过它还才能对样本数据进行分类。以股票为例,SVM能根据若干型态样本数据,把待预测的目标结果划分成“涨”和”跌”四种 ,从而实现预测股票涨跌的效果。

1 通过简单案例了解SVM的分类作用

    在Sklearn库里,封装了SVM分类的相关法律法律法律依据,也所以 说,亲们不用了解其中繁杂的算法,即可用它实现基于SVM的分类。通过如下SimpleSVMDemo.py案例,亲们来看下通过SVM库实现分类的做法,以及相关法律法律法律依据的调用法律法律法律依据。    

1    #!/usr/bin/env python
2    #coding=utf-8
3    import numpy as np
4    import matplotlib.pyplot as plt
5    from sklearn import svm
6    #给出平面上的若干点
7    points = np.r_[[[-1,1],[1.5,1.5],[1.8,0.2],[0.8,0.7],[2.2,2.8],[2.5,3.5],[4,2]]]
8    #按0和1标记成两类
9    typeName = [0,0,0,0,1,1,1]

    在第5行里,亲们引入了基于SVM的库。在第7行,亲们定义了若干个点,并在第9行把哪此点分成了两类,比如[-1,1]点是第一类,而[4,2]是第二类。

    这里请注意,在第7行定义点的以前,是通过np.r_法律法律法律依据,把数据转添加“列矩阵”,这麼 做的目的是让数据型态满足fit法律法律法律依据的要求。     

10	#建立模型
11	svmTool = svm.SVC(kernel='linear')
12	svmTool.fit(points,typeName)  #传入参数
13	#确立分类的直线
14	sample = svmTool.coef_[0] #系数
15	slope = -sample[0]/sample[1]  #斜率
16	lineX = np.arange(-2,5,1)#获取-2到5,间距是1的若干数据
17	lineY = slope*lineX-(svmTool.intercept_[0])/sample[1]

  在第11行里,亲们创建了基于SVM的对象,并指定该SVM模型采用比较常用的“线性核”来实现分类操作。

      在第14行,通过fit训练样本。这里fit法律法律法律依据和以前基于线性回归案例中的fit法律法律法律依据是一样的,只不过这里是基于线性核的相关算法,而以前是基于线性回归的相关算法(比如最小二乘法)。训练完成后,通过第14行和第15行的代码,亲们得到了能分隔两类样本的直线,包括直线的斜率和截距,并通过第16行和第17行的代码设置了分隔线的若干个点。    

18	#画出划分直线
19	plt.plot(lineX,lineY,color='blue',label='Classified Line')
20	plt.legend(loc='best') #绘制图例
21	plt.scatter(points[:,0],points[:,1],c='R')
22	plt.show()

  计算完成后,亲们通过第19行的plot法律法律法律依据绘制了分隔线,并在第21行通过scatter法律法律法律依据绘制所有的样本点。不可能 points是“列矩阵”的数据型态,所以是用points[:,0]来获取绘制点的 x坐标,用points[:,1]来获取y坐标,最后是通过第22行的show法律法律法律依据绘制图形。运行上述代码,亲们能想看 如下图13.8的效果,从中亲们能想看 ,浅绿色的边界线能有效地分隔两类样本。

    

    从许多例子中亲们能想看 ,SVM的作用是,根据样本,训练出能划分不同种类数据的边界线,由此实现“分类”的效果。而且,在根据训练样本挑选好边界线的参数后,还能根据其它这麼明确种类样本,计算出它的种类,以此实现“预测”效果。 

2 数据标准化处里

    标准化(normalization)处里是将型态样本按一定算法进行缩放,让它们落在某个范围比较小的区间,一并添加单位限制,让样本数据转添加无量纲的纯数值。

    在用机器学习法律法律法律依据进行训练时,一般才能 进行标准化处里,原困是Sklearn等库封装的许多机器学习算法对样本有一定的要求,不可能 许多型态值的数量级次责大多数型态值的数量级,不可能 有型态值次责正态分布,这麼预测结果会不准确。

    才能 说明的是,觉得在训练前对样本进行了标准化处里,改变了样本值,但不可能 在标准化的过程中是用同这麼 算法对删剪样本进行转换,属于“数据优化”,不用对后继的训练起到不好的作用。

    这里亲们是通过sklearn库提供的preprocessing.scale法律法律法律依据实现标准化,该法律法律法律依据是让型态值减去平均值而且除以标准差。通过如下ScaleDemo.py案例,亲们实际用下preprocessing.scale法律法律法律依据。     

1	#!/usr/bin/env python
2	#coding=utf-8
3	from sklearn import preprocessing
4	import numpy as np
5	
6	origVal = np.array([[10,5,3],
7	                   [8,6,12],
8	                   [14,7,15]])
9	#计算均值
10	avgOrig = origVal.mean(axis=0)
11	#计算标准差
12	stdOrig=origVal.std(axis=0)
13	#减去均值,除以标准差
14	print((origVal-avgOrig)/stdOrig)
15	scaledVal=preprocessing.scale(origVal)
16	#直接输出preprocessing.scale后的结果
17	print(scaledVal)

  在第6行里,亲们初始化了这麼 长宽各为3的矩阵,在第10行,通过mean法律法律法律依据计算了该矩阵的均值,在第12行则通过std法律法律法律依据计算标准差。

      第14行是用原始值减去均值,再除以标准差,在第17行,是直接输出preprocessing.scale的结果。第14行和第17行的输出结果相同,均是下值,从中亲们验证了标准化的具体做法。    

1	[[-0.26726124 -1.22474487 -1.37281295]
2	 [-1.06904497  0.          0.39223227]
3	 [ 1.336300621  1.22474487  0.930005300068]]

3 预测股票涨跌

    在以前的案例中,亲们用基于SVM的法律法律法律依据,通过一维直线来分类二维的点。据此还才能进一步推论:通过基于SVM的法律法律法律依据,亲们还还才能分类具有多个型态值的样本。

    比如还才能通过开盘价、收盘价、最高价、最低价和成交量等型态值,用SVM的算法训练出哪此型态值和股票“涨“和“跌“的关系,即通过型态值划分指定股票“涨”和“跌”的边界,这麼 搞笑的话,一旦输入其它的股票型态数据,即可预测出对应的涨跌状况。在如下的PredictStockBySVM.py案例中,亲们给出了基于SVM预测股票涨跌的功能。     

1	#!/usr/bin/env python
2	#coding=utf-8
3	import pandas as pd 
4	from sklearn import svm,preprocessing
5	import matplotlib.pyplot as plt
6	origDf=pd.read_csv('D:/stockData/ch13/3003300052018-09-012019-05-31.csv',encoding='gbk')
7	df=origDf[['Close', 'Low','Open' ,'Vol','Date']]
8	#diff列表示本日和上日收盘价的差
9	df['diff'] = df["Close"]-df["Close"].shift(1)
10	df['diff'].fillna(0, inplace = True)
11	#up列表示本日有无上涨,1表示涨,0表示跌
12	df['up'] = df['diff']   
13	df['up'][df['diff']>0] = 1
14	df['up'][df['diff']<=0] = 0
15	#预测值暂且初始化为0
16	df['predictForUp'] = 0

  第6行里,亲们从指定文件读取了饱含股票信息的csv文件,该csv格式的文件觉得是从网络数据接口获取得到的,具体做法还才能参考前面博文。

    从第9行里,亲们设置了df的diff列为本日收盘价和前日收盘价的差值,通过第12行到第14行的代码,亲们设置了up列的值,具体是,不可能 当日股票上涨,即本日收盘价大于前日收盘价,则up值是1,反之不可能 当日股票下跌,up值则为0。

    在第16行里,亲们在df对象里新建了表示预测结果的predictForUp列,该列的值暂且都设置为0,在后继的代码里,将根据预测结果填充这列的值。    

17	#目标值是真实的涨跌状况
18	target = df['up']
19	length=len(df)
20	trainNum=int(length*0.8)
21	predictNum=length-trainNum
22	#挑选指定列作为型态列
23	feature=df[['Close', 'High', 'Low','Open' ,'Volume']]
24	#标准化处里型态值
25	feature=preprocessing.scale(feature)

  在第18行里,亲们设置训练目标值是表示涨跌状况的up列,在第20行,设置了训练集的数量是总量的3000%,在第23行则设置了训练的型态值,请注意这里添加了日期许多不相关的列,而且,在第25行,对型态值进行了标准化处里。    

26	#训练集的型态值和目标值
27	featureTrain=feature[1:trainNum-1]
28	targetTrain=target[1:trainNum-1]
29	svmTool = svm.SVC(kernel='liner')
300	svmTool.fit(featureTrain,targetTrain)

  在第27行和第28行里,亲们通过截取指定行的法律法律法律依据,得到了型态值和目标值的训练集,在第26行里,以线性核的法律法律法律依据创建了SVM分类器对象svmTool。

     在第300行里,通过fit法律法律法律依据,用型态值和目标值的训练集训练svmTool分类对象。从上文里亲们不可能 想看 ,训练所用的型态值是开盘收盘价、最高最低价和成交量,训练所用的目标值是描述涨跌状况的up列。在训练完成后,svmTool对象中就饱含了能划分股票涨跌的相关参数。

31	predictedIndex=trainNum
32	#逐行预测测试集
33	while predictedIndex<length:
34	    testFeature=feature[predictedIndex:predictedIndex+1]            
35	    predictForUp=svmTool.predict(testFeature)    
36	    df.ix[predictedIndex,'predictForUp']=predictForUp    
37	    predictedIndex = predictedIndex+1

    在第33行的while循环里,亲们通过predictedIndex索引值,依次遍历测试集。

    在遍历过程中,通过第35行的predict法律法律法律依据,用训练好的svmTool分类器,逐行预测测试集中的股票涨跌状况,并在第36行里,把预测结果设置到df对象的predictForUp列中。      

38	#该对象只饱含预测数据,即只饱含测试集
39	dfWithPredicted = df[trainNum:length]
40	#刚开始绘图,创建这麼

子图
41	figure = plt.figure()
42	#创建子图     
43	(axClose, axUpOrDown) = figure.subplots(2, sharex=True)
44	dfWithPredicted['Close'].plot(ax=axClose)
45	dfWithPredicted['predictForUp'].plot(ax=axUpOrDown,color="red", label='Predicted Data')
46	dfWithPredicted['up'].plot(ax=axUpOrDown,color="blue",label='Real Data')
47	plt.legend(loc='best') #绘制图例
48	#设置x轴坐标标签和旋转深层
49	major_index=dfWithPredicted.index[dfWithPredicted.index%2==0]
3000	major_xtics=dfWithPredicted['Date'][dfWithPredicted.index%2==0]
51	plt.xticks(major_index,major_xtics)
52	plt.setp(plt.gca().get_xticklabels(), rotation=300) 
53	plt.title("通过SVM预测300330005的涨跌状况")
54	plt.rcParams['font.sans-serif']=['SimHei']
55	plt.show()

  不可能 在以前的代码里,亲们只设置测试集的predictForUp列,并这麼设置训练集的该列数据,所以在第39行里,用切片的手段,把测试集数据放置到dfWithPredicted对象中,请注意这里切片的起始和刚开始值是测试集的起始和刚开始索引值。至此完成了数据准备工作,在以前的代码里,亲们将用matplotlib库刚开始绘图。

    在第43行里,亲们通过subplots法律法律法律依据设置了这麼 子图,并通过sharex=True让这这麼 子图的x轴具有相同的刻度和标签。在第44行代码里,在axClose子图中,亲们用plot法律法律法律依据绘制了收盘价的走势。在第45行代码里,在axUpOrDown子图中,亲们绘制了预测到的涨跌状况,而在第46行里,还是在axUpOrDown子图里,绘制了哪此天的股票真实的涨跌状况。

    在第49行到第52行的代码里,亲们设置了x标签的文字以及旋转深层,这麼 做的目的是让标签文字看上去不至于太密集。在第53行里,亲们设置了中文标题,不可能 要显示中文,所以才能 第54行的代码,最后在55行通过show法律法律法律依据展示了图片。运行上述代码,能想看 如下图所示的效果。

    

    其中上图展示了收盘价,下图的浅绿色线条表示真实的涨跌状况,0表示跌,1表示上涨,而红色则表示预测后的结果。

4 结论

     对比一下,虽有偏差,但大体相符。综上所述,本案例是数学深层,演示了通过SVM分类的做法,包括不可能 划分型态值和目标值,怎么对样本数据进行标准化处里,怎么用训练数据训练SVM,还有怎么用训练后的结果预测分类结果。 

5 总结和版权说明

    本文是给进程运行员加财商系列,以前还有两篇博文

    本文的内容即将出书,在出版的书里,是用股票案例和亲们讲述Python入门时的知识点,敬请期待

    

    有不少女网友 视频转载和我想要转载我的博文,买车人感到十分荣幸,这也是买车人不断写博文的动力。关于本文的版权有如下统一的说明,抱歉就不逐一回复了。

    1 本文可转载,不用告知,转载时请用链接的法律法律法律依据,给出原文出处,别简单地通过文本法律法律法律依据给出,一并写明原作者是hsm_computer。

    2 在转载时,请原文转载 ,谢绝洗稿。而且买车人保留追究法律责任的权利。

猜你喜欢

2分彩赢钱诀窍_可乐、酱油里含的“焦糖色素”是什么?

2分彩赢钱诀窍食品安全都可以受重视,卫生福利部食品药物2分彩赢钱诀窍管理署研议决定将焦糖色素列为第39种著色剂,2013年年底公告实施限2分彩赢钱诀窍量标准后,这些食物的焦糖色

2019-12-12

好运飞艇真假_炒猪肝嫩滑不硬的小技巧

猪好运飞艇真假肝含丰富的铁、磷、维生素b2A,营养价值高。本来在炒的过程中,操作不好就好运飞艇真假会变硬而影响甜度!今天《生活法律辦法 网》小编就来分享烹好运飞艇真假调猪肝

2019-12-12

1.5分pk10最新网站 _千万不可让孩子“鸭子坐”!这种坐姿会严重影响孩子的骨骼发育!

许多许多小孩坐在地上玩的以前,腿会摆成“鸭子式”,這個“W1.5分pk10最新网站 型坐姿”对于骨骼还在发育的孩子而言,居于着很大的隐患!长时间使用這個坐姿,会影响孩子的骨骼发

2019-12-12

极速一分快3稳赢计划_桂圆抗疲劳、治失眠,功效多多!

桂圆又称龙眼,自古以来都被视为珍贵补品,将会桂圆多生长于南方,因而有“南桂圆、北人参”之说!桂圆入药治病时,多用桂圆干,桂圆干是取桂圆果极速一分快3稳赢计划肉干燥而得,桂圆干含

2019-12-12

腾讯3分彩信誉网_DHA脂肪酸可降低患痴呆风险

华盛顿11月23日电 美国科学家最近敲定的研究成果表明,血液中较高的D腾讯3分彩信誉网HA脂肪酸含量不可能 利于降低痴呆和早老性痴呆(阿尔茨海默氏症)。DHA在人脑和鱼体内絮

2019-12-11