课程作业——基于数据挖掘算法和技术指标预测股票涨跌
发布日期:2022-03-09 00:49:12 浏览次数:74 分类:技术文章

本文共 3340 字,大约阅读时间需要 11 分钟。

#导入数据

import pandas as pd

data = pd.read_csv('D:/QQ文件夹/金发科技数据十年.csv')

data.head()

 

#绘制自相关系数图

import matplotlib.pyplot as plt

import numpy as np

import seaborn as sns

plt.figure(figsize=(20, 20)) # 指定绘图对象宽度和高度

colnm = data.columns.tolist() # 列表头

mcorr = data[colnm].corr(method="spearman") # 相关系数矩阵,即给出了任意两个变量之间的相关系数

mask = np.zeros_like(mcorr, dtype=np.bool) # 构造与mcorr同维数矩阵 为bool型

mask[np.triu_indices_from(mask)] = True # 角分线右侧为True

#cmap = sns.diverging_palette(220, 10, as_cmap=True) # 返回matplotlib colormap对象

g = sns.heatmap(mcorr, mask=mask, square=True, annot=True, fmt='0.5f') # 热力图(看两两相似度)

plt.show()

 

#剔除相关系数过高的几个属性,没有用主成分分析剔除属性是因为后续准确率不高

data = data.drop(['BIAS2','MA8','KDJ_K','BIAS3'],axis=1)

data

#检测缺失值

data.isnull().sum()

 

#建立属性变量X和类别y

from sklearn.tree import DecisionTreeClassifier

X=data.iloc[:,1:13]

print(X)

y=data['Y']

y.value_counts()#上涨天数1031天,下跌或不变天数1076天

#数据标准化处理,消除量纲,每个数据减去均值再除以标准差

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

scaler.fit(X)

X=scaler.transform(X)

X.shape

#分配训练集与测试集

from sklearn import tree

from sklearn.model_selection import train_test_split

import matplotlib.pyplot as plt

train_x,test_x,train_y,test_y= train_test_split(X,y,test_size=0.1,train_size=0.9)

#用信息增益法划分决策树

tree_modela=DecisionTreeClassifier(criterion='entropy',max_depth=3)

tree_modela.fit(train_x,train_y)

tree.plot_tree(tree_modela,feature_names=name,class_names='01')

plt.show()

 

#深度改为4,检测分类效果

tree_modeld=DecisionTreeClassifier(max_depth=4)

tree_modeld.fit(train_x,train_y)

tree.plot_tree(tree_modeld,feature_names=name,class_names='01')

plt.show()

tree_modele=DecisionTreeClassifier(criterion='entropy',max_depth=4)

tree_modele.fit(train_x,train_y)

tree.plot_tree(tree_modele,feature_names=name,class_names='01')

plt.show()

#深度为4时分类效果逊于深度为3,可能出现了过拟合现象,通过设置最小叶节点数量为13减少过拟合

tree_modelb=DecisionTreeClassifier(criterion='entropy',max_leaf_nodes=13)

tree_modelb.fit(train_x,train_y)

tree.plot_tree(tree_modelb,feature_names=name,class_names='01')

plt.show()

 

采用准确率得到的准确率为0.7096,采用F1度量得到的准确率为0.7105 

#SVC支持向量机法分类

from sklearn import svm

clf=svm.SVC()

clf.fit(train_x,train_y)

result=clf.predict(test_x)

print(result)

#逻辑回归模型

from sklearn.linear_model import LogisticRegression as LR

lr=LR()

lr.fit(train_x,train_y)

result=clf.predict(test_x)

sc=clf.score(train_x, train_y)

#神经网络模型

from sklearn.neural_network import MLPClassifier

wl=MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=8,random_state=1)

wl.fit(train_x,train_y)

result=wl.predict(test_x)

sc=wl.score(train_x,train_y)

#K近邻算法 p=1代表用曼哈顿距离度量

from sklearn import neighbors

knn = neighbors.KNeighborsClassifier(n_neighbors=30,weights='uniform', algorithm='auto', leaf_size=30,p=1, metric='minkowski', metric_params=None, n_jobs=1)

knn.fit(train_x, train_y)

#p=2用欧氏距离度量

knn1 = neighbors.KNeighborsClassifier(n_neighbors=30,weights='uniform', algorithm='auto', leaf_size=30,p=2, metric='minkowski', metric_params=None, n_jobs=1)

knn1.fit(train_x, train_y)

#多划分几次训练集和测试集

train_x,test_x,train_y,test_y= train_test_split(X,y,test_size=0.2,train_size=0.8)

train_x,test_x,train_y,test_y= train_test_split(X,y,test_size=0.3,train_size=0.7)

#评价模型

import sklearn.metrics as metrics

result_modela=metrics.classification_report(test_y,tree_modela.predict(test_x))

print(result_modela)

注:一是时间序列预测不能使用十折交叉验证,因为不能用未来的信息预测过去的信息,二是要按不同比例多划分几次训练集和测试集测试模型的准确率。

转载地址:https://blog.csdn.net/m0_57065258/article/details/122643108 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:用Matlab制作古诺模型企业利润与企业生产数量的三维图像
下一篇:viewer由单击放大图片改成双击放大

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月08日 21时54分40秒