课程作业——基于数据挖掘算法和技术指标预测股票涨跌

导入数据

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)

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

Original: https://blog.csdn.net/m0_57065258/article/details/122643108
Author: xxm5656
Title: 课程作业——基于数据挖掘算法和技术指标预测股票涨跌

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/699158/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球