创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
ai换脸 基于SVM算法的股票展望分析 - 偷偷撸1
你的位置:偷偷撸1 > 偷拍图片 > ai换脸 基于SVM算法的股票展望分析
ai换脸 基于SVM算法的股票展望分析
发布日期:2024-08-27 10:37    点击次数:83

ai换脸 基于SVM算法的股票展望分析

1.数据集登第与描绘

由于股票数据的无极性、无序性,不合乎登第太多的数据行动模子试验的数据集。故本文选出的数据是“温氏股份”200个交游日的股票数据,数据集的原始变量有交游日历、开盘价、收盘价、最廉价、最高价、成交量、价钱变动、涨跌幅等。本文的数据起原是Python的一个第三方库TuShare-财经数据包。其中,date代表日历,open为今日开盘价,high为今日最高价,close为今日收盘价,low为今日的最廉价,volume为今日的成交量, price_change为价钱变动,p_change为涨跌幅,diff为收盘价与开盘价之差即close-open取得,up为1代表涨ai换脸,up为-1代表为跌。

from cProfile import label
from cmath import sqrt
from csv import field_size_limit
from os import closerange
import tushare as ts
import numpy as np
import pandas as pd
from pandas import DataFrame as DF
from sklearn import svm
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn import preprocessing as pre
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
import seaborn as sns
from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_curve, auc
#导入plot_roc_curve,roc_curve和roc_auc_score模块
from sklearn.metrics import plot_roc_curve,roc_curve,auc,roc_auc_score
from sklearn.metrics import mean_squared_error # 均方罅隙
from sklearn.metrics import mean_absolute_error # 平方富饶罅隙
from sklearn.metrics import r2_score

#中语标签、负号平淡透露
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

#1数据网罗
#温氏股份的股票代码为300498,数据网罗并存到土产货csv文献
data = ts.get_hist_data(code='300498',start = '2019-12-01',end='2022-05-04')
#取近90天的温氏股份股票的交游日历、开盘价、收盘价、最廉价、最高价、成交量、价钱变动以及涨跌幅数据
data = DF(data).iloc[0:200,0:7]
#diff列代表今日收盘价和开盘价之差
data['diff'] = data['close']-data['open']
data.fillna(0,inplace=True)
#up列为1代表今日飞腾,-1代表当全国落
data['up'] = data['diff']
data['up'][data['diff']>=0] = 1
data['up'][data['diff']<0] = -1
#将数据写入csv文献
data.to_csv('C:/Users/86188/Desktop/Python数据挖掘与数据分析/基于SVM算法的股票展望/data/data.csv')

图片

图1 温氏股份200个交游日的数据 2.数据集预贬责

对数据集进行检测缺失值,并莫得发现缺失值。

由于股票的波动至极会有金融机构发声,数据产生的200个交游日内该股票莫得报说念琢磨至极主见,即默许莫得至极值。

对数据中成交量进行最大-最小尺度化。

#2数据的预贬责
data = pd.read_csv('C:/Users/86188/Desktop/Python数据挖掘与数据分析/基于SVM算法的股票展望/data/data.csv')
#稽察数据情况
data.describe()
#检测有完满失值
noneIndex = data.loc[data.isnull().any(axis=1)].index
#输出空列表,讲明莫得缺失值
print('缺失值场所行号:',noneIndex)
#对volume成交量进行最大最小归一化贬责
data['volume'] = (data['volume'] - min(data['volume'])) / (max(data['volume']) - min(data['volume']))
print(data)

图片

图2 数据的初步贬责范围

由于日历不是股票的琢磨变量,故排斥在外。借助PCA主身分分析,对开盘价、收盘价、最廉价、最高价、成交量、价钱变动、涨跌幅和当日股价之差分析,咱们不错从图3得出前五个变量所占的累计孝顺率达到0.99973944,仍是能代表数据的权臣特征,即开盘价、收盘价、最廉价、最高价、成交量。

#3模子的搭建
#x为变量,撤除日历
x = data.iloc[:,1:9]
#y为涨跌值
y = data.iloc[:,9]
#3.1应用pca主身分分析,从开盘价、收盘价、最廉价、最高价、成交量、价钱变动、涨跌幅和当日股价之差登第特征5个变量
pca = PCA(n_components=None)
pca.fit(x)
pca.components_  # 身分矩阵
print('各变量的方差:',pca.explained_variance_)
print('各变量的孝顺度:',pca.explained_variance_ratio_)
#证明蓄积孝顺率,讲明前五个变量的累计孝顺率仍是达到0.999,则取前五个行动特征变量
print('蓄积孝顺率:',np.cumsum(pca.explained_variance_ratio_))
#索求特征变量
pca = PCA(n_components=5)
pca.fit(x)
nx = pca.fit_transform(x)
print('特征变量数据:',nx)

图片

图3 各变量PCA主身分分析范围

将特征变量的数据赋值给变量nx,并对特征变量的数据进行法式化贬责,并将代表涨跌情况的up数据赋予变量y,终末永诀试验集和测试集,试验集占90%,测试集仅为20个数据,占10%。

3.SVM算法模子建立

​ 调用Python第三方库中的sklearn库的SVM模子,并调用线性核函数、多项式函数、sigmoid函数以及rbf函数分别构建SVM模子,主见在于分析核函数不同关于SVM模子股票展望的影响。

图片

图4 Python代码搭建不同核函数的SVM模子 4.SVM算法模子的评估

从图5的ROC弧线对比来看,不同核函数SVM模子ROC弧线的拐点昭彰不同,linear线性核函数的SVM模子拐点最高,其他三个拐点高度相同。从这个ROC弧线来看,彰着linear线性核函数的SVM模子贬责的范围更好。

fig,ax = plt.subplots(figsize=(12,10))
lsvm_roc = plot_roc_curve(estimator=lsvm, X=x_test, 
                        y=y_test, ax=ax, linewidth=1,label='linear')
ssvm_roc = plot_roc_curve(estimator=ssvm, X=x_test, 
                        y=y_test, ax=ax, linewidth=1,label='sigmoid')
psvm_roc = plot_roc_curve(estimator=psvm, X=x_test,
                        y=y_test, ax=ax, linewidth=1,label='poly')
rsvm_roc = plot_roc_curve(estimator=rsvm, X=x_test,
                        y=y_test, ax=ax, linewidth=1,label='rbf')
ax.legend(fontsize=12)
plt.savefig(fname='C:/Users/86188/Desktop/Python数据挖掘与数据分析/基于SVM算法的股票展望/tmp/ROC.jpg')
plt.show()

图片

图5 不同核函数SVM模子的ROC弧线图

从模子的评价得分来看,linear线性核函数的SVM模子最优,得分为0.95,其次到sigmoid核函数的SVM模子,最差是多项式核函数的SVM模子。

#mse、mae、rmse、r2计较
lsvm_mse = mean_squared_error(y_test,lyp)
lsvm_mae = mean_absolute_error(y_test,lyp)
lsvm_rmse = sqrt(lsvm_mse)
lsvm_r2 = r2_score(y_test,lyp)
print('核函数为linear的SVM模子:')
print('mse:',lsvm_mse)
print('mae:',lsvm_mae)
print('rmse:',lsvm_rmse)
print('r2:',lsvm_r2)

ssvm_mse = mean_squared_error(y_test,syp)
ssvm_mae = mean_absolute_error(y_test,syp)
ssvm_rmse = sqrt(ssvm_mse)
ssvm_r2 = r2_score(y_test,syp)
print('核函数为sigmoid的SVM模子:')
print('mse:',ssvm_mse)
print('mae:',ssvm_mae)
print('rmse:',ssvm_rmse)
print('r2:',ssvm_r2)

psvm_mse = mean_squared_error(y_test,pyp)
psvm_mae = mean_absolute_error(y_test,pyp)
psvm_rmse = sqrt(psvm_mse)
psvm_r2 = r2_score(y_test,pyp)
print('核函数为poly的SVM模子:')
print('mse:',psvm_mse)
print('mae:',psvm_mae)
print('rmse:',psvm_rmse)
print('r2:',psvm_r2)

rsvm_mse = mean_squared_error(y_test,ryp)
rsvm_mae = mean_absolute_error(y_test,ryp)
rsvm_rmse = sqrt(rsvm_mse)
rsvm_r2 = r2_score(y_test,ryp)
print('核函数为rbf的SVM模子:')
print('mse:',rsvm_mse)
print('mae:',rsvm_mae)
print('rmse:',rsvm_rmse)
print('r2:',rsvm_r2)

图片

图6 各模子的得分

​ 从各个模子的MSE、MAE、RMSE、R2来看,昭彰linear线性核函数的SVM模子的MSE最小,R2最大,模子最优,最差的是多项式函数的SVM模子

图片

图7 各模子的MSE、MAE、RMSE、R2情况

从欺侮矩阵对比图来看,咱们发现落在(0,0)和(1,1)区域最多的欺侮矩阵是linear线性核函数的SVM模子,其次到sigmoid核函数的SVM模子,然后再到以rbf为核函数的SVM模子,最差是多项式核函数的SVM模子。

#画出欺侮矩阵
figure = plt.subplots(figsize=(12,10))
plt.subplot(2,2,1)
plt.title('核函数为linear')
heatmap = sns.heatmap(lcm, annot=True, fmt='d')
heatmap.yaxis.set_ticklabels(heatmap.yaxis.get_ticklabels(), rotation=0, ha='right')
heatmap.xaxis.set_ticklabels(heatmap.xaxis.get_ticklabels(), rotation=45, ha='right')
plt.ylabel('true label')
plt.xlabel('predict label')

plt.subplot(2,2,2)
plt.title('核函数为sigmoid')
heatmap = sns.heatmap(scm, annot=True, fmt='d')
heatmap.yaxis.set_ticklabels(heatmap.yaxis.get_ticklabels(), rotation=0, ha='right')
heatmap.xaxis.set_ticklabels(heatmap.xaxis.get_ticklabels(), rotation=45, ha='right')
plt.ylabel('true label')
plt.xlabel('predict label')

plt.subplot(2,2,3)
plt.title('核函数为polynomial')
heatmap = sns.heatmap(pcm, annot=True, fmt='d')
heatmap.yaxis.set_ticklabels(heatmap.yaxis.get_ticklabels(), rotation=0, ha='right')
heatmap.xaxis.set_ticklabels(heatmap.xaxis.get_ticklabels(), rotation=45, ha='right')
plt.ylabel('true label')
plt.xlabel('predict label')

plt.subplot(2,2,4)
plt.title('核函数为rbf')
heatmap = sns.heatmap(rcm, annot=True, fmt='d')
heatmap.yaxis.set_ticklabels(heatmap.yaxis.get_ticklabels(), rotation=0, ha='right')
heatmap.xaxis.set_ticklabels(heatmap.xaxis.get_ticklabels(), rotation=45, ha='right')
plt.ylabel('true label')
plt.xlabel('predict label')
plt.savefig(fname='C:/Users/86188/Desktop/Python数据挖掘与数据分析/基于SVM算法的股票展望/tmp/confusion_matrix.jpg')
plt.show()

图片

图8 各模子欺侮矩阵

从各个模子的展望值与真确值重合弧线情况图来看,展望值和真确值齐是一致进度最高的为以linear为核函数的SVM模子、其次到sigmoid核函数的SVM模子,然后再到以rbf为核函数的SVM模子,最差是多项式核函数的SVM模子。

#画出收盘价走势图以及真确值和展望值图
plt.subplot(3,1,1)
#收盘价走势图
plt.title('收盘价走势图')
plt.plot(data['date'].iloc[-20:],data['close'].iloc[-20:])
plt.xticks(rotation=30)
plt.subplot(3,1,3)
plt.title('展望-真确图')
plt.plot(data['date'].iloc[-20:],lyp,color='red',label='展望值')
plt.plot(data['date'].iloc[-20:],data['up'].iloc[-20:],color='blue',label='真确值')
plt.xticks(rotation=30)
plt.legend()
plt.savefig(fname='C:/Users/86188/Desktop/Python数据挖掘与数据分析/基于SVM算法的股票展望/tmp/lyp.jpg')
plt.show()

图片

图9 核函数为linear的SVM模子
#画出收盘价走势图以及真确值和展望值图
plt.subplot(3,1,1)
#收盘价走势图
plt.title('收盘价走势图')
plt.plot(data['date'].iloc[-20:],data['close'].iloc[-20:])
plt.xticks(rotation=30)
plt.subplot(3,1,3)
plt.title('展望-真确图')
plt.plot(data['date'].iloc[-20:],syp,color='red',label='展望值')
plt.plot(data['date'].iloc[-20:],data['up'].iloc[-20:],color='blue',label='真确值')
plt.xticks(rotation=30)
plt.legend()
plt.savefig(fname='C:/Users/86188/Desktop/Python数据挖掘与数据分析/基于SVM算法的股票展望/tmp/syp.jpg')
plt.show()

图片

图10 核函数切多项式的SVM模子
#画出sigmoid收盘价走势图以及真确值和展望值图
plt.subplot(3,1,1)
#收盘价走势图
plt.title('收盘价走势图')
plt.plot(data['date'].iloc[-20:],data['close'].iloc[-20:])
plt.xticks(rotation=30)
plt.subplot(3,1,3)
plt.title('展望-真确图')
plt.plot(data['date'].iloc[-20:],pyp,color='red',label='展望值')
plt.plot(data['date'].iloc[-20:],data['up'].iloc[-20:],color='blue',label='真确值')
plt.xticks(rotation=30)
plt.legend()
plt.savefig(fname='C:/Users/86188/Desktop/Python数据挖掘与数据分析/基于SVM算法的股票展望/tmp/pyp.jpg')
plt.show()

图片

图11 核函数为sigmoid的SVM模子
#画出rbf收盘价走势图以及真确值和展望值图
plt.subplot(3,1,1)
#收盘价走势图
plt.title('收盘价走势图')
plt.plot(data['date'].iloc[-20:],data['close'].iloc[-20:])
plt.xticks(rotation=30)
plt.subplot(3,1,3)
plt.title('展望-真确图')
plt.plot(data['date'].iloc[-20:],ryp,color='red',label='展望值')
plt.plot(data['date'].iloc[-20:],data['up'].iloc[-20:],color='blue',label='真确值')
plt.xticks(rotation=30)
plt.legend()
plt.savefig(fname='C:/Users/86188/Desktop/Python数据挖掘与数据分析/基于SVM算法的股票展望/tmp/ryp.jpg')
plt.show()

图片

ipad怎么在线看av 图12 核函数为rbf的SVM模子 5.模子矫正

​ 从模子评价来看,SVM算法的核函数对模子评分、精度来说很迫切,不同的数据集得当不同的核函数。关于股票涨跌的情况展望,咱们不难发现,一些评价尺度是不行代表模子的厉害了,如诚然linear核函数的SVM模子是最佳的,关联词其真确值和展望值重合度照旧有一定的差距,全体走势是相同的,但似乎存在展望时差,即涨跌拐点日历有进出。是以矫处死子应该使用自编的核函数,基于径向基核函数的SVM算法用于股票价钱展望,对股票将来十五天的走向进行展望,不错发现SVM算法展望的范围可靠性强、罅隙小,但也会挥霍一定的时辰,裁减运算速率。

6.论断

贬责股票函数需要先用PCA主身分分析尽可能裁减维度,贬责冗余函数,不同核函数的SVM算法对股票展望的情况不同。从上头的例子来看,昭彰linear核函数更得当“温氏股份”的股票展望分析,但从知网著作的角度来看ai换脸,最佳使用径向基核函数的SVM算法。

,一些评价尺度是不行代表模子的厉害了,如诚然linear核函数的SVM模子是最佳的,关联词其真确值和展望值重合度照旧有一定的差距,全体走势是相同的,但似乎存在展望时差,即涨跌拐点日历有进出。是以矫处死子应该使用自编的核函数,基于径向基核函数的SVM算法用于股票价钱展望,对股票将来十五天的走向进行展望,不错发现SVM算法展望的范围可靠性强、罅隙小,但也会挥霍一定的时辰,裁减运算速率。

6.论断

贬责股票函数需要先用PCA主身分分析尽可能裁减维度,贬责冗余函数,不同核函数的SVM算法对股票展望的情况不同。从上头的例子来看,昭彰linear核函数更得当“温氏股份”的股票展望分析,但从知网著作的角度来看,最佳使用径向基核函数的SVM算法。

本站仅提供存储职业,统统施行均由用户发布,如发现存害或侵权施行,请点击举报。

创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
JzEngine Create File False