在刚刚的前提下,用python用(开盘价的涨跌幅、最高价的涨跌幅、最低价的涨跌幅,标记)建立决策树。
时间: 2024-03-22 10:40:21 浏览: 125
好的,根据您的要求,可以使用Python的sklearn库来建立决策树模型,代码如下:
```python
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
# 读取股票交易数据,例如AAPL的交易数据
df = pd.read_csv('AAPL.csv')
# 计算收盘价的涨跌幅
df['涨跌幅'] = (df['Close'] - df['Close'].shift(1)) / df['Close'].shift(1)
# 计算开盘价、最高价、最低价的涨跌幅
df['开盘价涨跌幅'] = (df['Open'] - df['Open'].shift(1)) / df['Open'].shift(1)
df['最高价涨跌幅'] = (df['High'] - df['High'].shift(1)) / df['High'].shift(1)
df['最低价涨跌幅'] = (df['Low'] - df['Low'].shift(1)) / df['Low'].shift(1)
# 计算涨跌幅的均值和标准差
m = df['涨跌幅'].mean()
s = df['涨跌幅'].std()
# 标记交易价格
df['标记'] = pd.cut(df['涨跌幅'], bins=[-np.inf, m-3*s, m-2*s, m-s, m+s, m+2*s, m+3*s, np.inf], labels=[-3, -2, -1, 0, 1, 2, 3])
# 提取训练数据和标签
X = df[['开盘价涨跌幅', '最高价涨跌幅', '最低价涨跌幅']]
y = df['标记']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 建立决策树模型
model = DecisionTreeClassifier(max_depth=3)
model.fit(X_train, y_train)
# 预测测试集结果
y_pred = model.predict(X_test)
# 计算模型准确率和混淆矩阵
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
# 打印模型准确率和混淆矩阵
print(f'模型准确率为:{accuracy}')
print(f'混淆矩阵为:\n{cm}')
# 可视化决策树
from sklearn.tree import plot_tree
plt.figure(figsize=(20, 10))
plot_tree(model, filled=True, feature_names=['开盘价涨跌幅', '最高价涨跌幅', '最低价涨跌幅'], class_names=['-3', '-2', '-1', '0', '1', '2', '3'])
plt.show()
```
这段代码首先读取了AAPL的交易数据,然后计算了收盘价、开盘价、最高价、最低价的涨跌幅,并对收盘价的涨跌幅进行了标记。接着,使用sklearn库划分了训练集和测试集,并建立了决策树模型。最后,计算了模型的准确率和混淆矩阵,并可视化了决策树。
需要注意的是,决策树模型的准确率和混淆矩阵可能会受到训练集和测试集的随机划分影响,因此建议多次运行代码,取多次运行的结果的平均值作为模型的准确率和混淆矩阵。
阅读全文