数据清洗

import pandas as pd

# 读取数据
data = pd.read_excel('E:/pythonProject5/深度学习/新建 XLS 工作表.xls')

# 打印数据的列名
print(data.columns)

# 删除缺失值
data.dropna(inplace=True)

# 删除重复值
data.drop_duplicates(inplace=True)

# 处理异常值
data = data[(data['涨跌幅'] >= -10) & (data['涨跌幅'] <= 10)]


# 数据归一化
# 最小-最大规范化
def min_max_scale(data):
    return (data - data.min()) / (data.max() - data.min())

# 对数据进行归一化
data['涨跌幅'] = min_max_scale(data['涨跌幅'])


# Z-score规范化
def z_score_scale(data):
    return (data - data.mean()) / data.std()

# 对数据进行归一化
data['涨跌幅'] = z_score_scale(data['涨跌幅'])

# 数据标准化

from scipy.stats import boxcox

# Box-Cox变换
# 需要保证数据为正数,如果数据中存在负数,则需要先进行平移操作
data['涨跌幅'] = data['涨跌幅'] - data['涨跌幅'].min() + 1
data['涨跌幅'], _ = boxcox(data['涨跌幅'])

# 对数据进行标准化
data['涨跌幅'] = z_score_scale(data['涨跌幅'])


from scipy.stats import yeojohnson


# Yeo-Johnson变换
# 需要保证数据为正数,如果数据中存在负数,则需要先进行平移操作
data['涨跌幅'] = data['涨跌幅'] - data['涨跌幅'].min() + 1
data['涨跌幅'], _ = yeojohnson(data['涨跌幅'])

# 对数据进行标准化
data['涨跌幅'] = z_score_scale(data['涨跌幅'])

股票价格预测

使用卷积神经网络进行股票价格预测

#这段代码使用的是一个简单的卷积神经网络(CNN)模型。
import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Conv1D, MaxPooling1D, Flatten, Dense, Dropout

# 加载数据
data = pd.read_excel('E:\pythonProject5\深度学习\新建 XLS 工作表.xls')

# 提取每日开盘价、收盘价、最高价和最低价
open_prices = data['开盘'].values
close_prices = data['收盘'].values
high_prices = data['最高'].values
low_prices = data['最低'].values

# 将价格数据转换为二维数组
prices = np.array([open_prices, close_prices, high_prices, low_prices])
prices = np.transpose(prices)

# 定义CNN模型
model = Sequential()
model.add(Conv1D(64, 3, activation='relu', input_shape=(prices.shape[1], 1)))
model.add(MaxPooling1D(1))  # 修改池化窗口大小为1
model.add(Conv1D(32, 3, activation='relu', padding='same'))
model.add(MaxPooling1D(2))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='linear'))

model.summary()

# 将数据转换为三维数组
prices = np.expand_dims(prices, axis=2)

# 编译模型
model.compile(loss='mse', optimizer='adam')

# 拟合模型
model.fit(prices, close_prices, epochs=50, batch_size=16, verbose=1)

# 提取特征
features = model.predict(prices)

print(features)



import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv1D, MaxPooling1D, Flatten

# 读取Excel数据
data = pd.read_excel('E:\pythonProject5\深度学习\新建 XLS 工作表.xls')

# 提取股票价格列
prices = data['收盘'].values

# 数据归一化
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_prices = scaler.fit_transform(prices.reshape(-1, 1))

# 创建训练集和测试集
train_size = int(len(scaled_prices) * 0.8)
train_data = scaled_prices[:train_size]
test_data = scaled_prices[train_size:]

# 构建时间序列数据
def create_sequences(data, seq_length):
    X = []
    y = []
    for i in range(len(data)-seq_length):
        X.append(data[i:i+seq_length])
        y.append(data[i+seq_length])
    return np.array(X), np.array(y)

seq_length = 10
X_train, y_train = create_sequences(train_data, seq_length)
X_test, y_test = create_sequences(test_data, seq_length)

# 构建卷积神经网络模型
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(seq_length, 1)))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(50, activation='relu'))
model.add(Dense(1))

# 编译模型
model.compile(optimizer='adam', loss='mse')

# 训练模型
model.fit(X_train, y_train, epochs=50, batch_size=16)

# 使用模型进行预测
predicted_prices = model.predict(X_test)

# 反归一化
predicted_prices = scaler.inverse_transform(predicted_prices)

# 打印预测结果
for i in range(len(predicted_prices)):
    print('Predicted:', predicted_prices[i], 'Actual:', test_data[i+seq_length])


使用交叉验证方法对训练好的模型进行评估并计算准确率、精度等指标:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score

# 加载数据
iris = load_iris()
X_train = iris.data
y_train = iris.target

# 定义模型
model = LogisticRegression(max_iter=1000)  # 增加最大迭代次数

# 使用交叉验证方法对模型进行评估
scores = cross_val_score(model, X_train, y_train, cv=5)  # 5折交叉验证

# 计算准确率、精度、召回率和F1分数的平均值
accuracy = scores.mean()
precision = cross_val_score(model, X_train, y_train, cv=5, scoring='precision_macro').mean()
recall = cross_val_score(model, X_train, y_train, cv=5, scoring='recall_macro').mean()
f1 = cross_val_score(model, X_train, y_train, cv=5, scoring='f1_macro').mean()

# 打印评估结果
print("准确率:", accuracy)
print("精度:", precision)
print("召回率:", recall)
print("F1分数:", f1)


使用线性回归模型进行股票价格预测

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 读取数据集
data = pd.read_excel('E:\pythonProject5\深度学习\新建 XLS 工作表.xls')

# 选择特征和目标变量
features = data[['开盘', '涨跌额', '涨跌幅', '最低', '最高', '成交量', '成交金额']]
target = data['收盘']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测股票价格
predictions = model.predict(X_test)

# 对比实际价格进行验证
mse = mean_squared_error(y_test, predictions)
print('均方误差(MSE):', mse)

# 输出预测结果和实际价格
result = pd.DataFrame({'预测价格': predictions, '实际价格': y_test})
result = result.sort_index()  # 按照样本编号从小到大排序
print(result)

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定使用SimHei字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 绘制预测价格和实际价格的图像
plt.plot(result.index, result['预测价格'], label='预测价格')
plt.plot(result.index, result['实际价格'], label='实际价格')
plt.xlabel('样本编号')
plt.ylabel('股票价格')
plt.title('预测价格 vs 实际价格')
plt.legend()
plt.show()   


总结

上述所有代码中运用了卷积神经网络中的那个类型内容:上述所有代码中运用了卷积神经网络中的CNN(Convolutional Neural Network)类型。

注意

  • 代码中需要将'E:/pythonProject5/深度学习/新建 XLS 工作表.xls'替换为你的数据文件路径。
  • 本文仅供参考,实际应用中还需要根据具体情况进行调整和优化。
  • 股票投资具有风险,请谨慎投资。
数据清洗和股票价格预测的卷积神经网络应用

原文地址: https://www.cveoy.top/t/topic/fvE6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录