深度学习股票价格预测:数据清洗、CNN和线性回归模型应用
深度学习在股票价格预测中的应用研究/n/n股票预测是金融领域的一个重要问题,深度学习作为一种强大的机器学习技术,被广泛应用于股票价格预测中。上述代码展示了几种常用的数据清洗和预处理方法,以及使用卷积神经网络(CNN)和线性回归模型进行股票价格预测的示例。/n/n### 数据清洗和预处理/n/n代码首先展示了数据清洗的过程。通过读取Excel数据,打印数据的列名,删除缺失值、重复值和异常值,以及进行数据归一化和标准化等操作,可以保证数据的质量和一致性。/n/npython/nimport pandas as pd/n/n# 读取数据/ndata = pd.read_excel('E:/pythonProject5/深度学习/新建 XLS 工作表.xls')/n/n# 打印数据的列名/nprint(data.columns)/n/n# 删除缺失值/ndata.dropna(inplace=True)/n/n# 删除重复值/ndata.drop_duplicates(inplace=True)/n/n# 处理异常值/ndata = data[(data['涨跌幅'] >= -10) & (data['涨跌幅'] <= 10)]/n/n/n# 数据归一化/n# 最小-最大规范化/ndef min_max_scale(data):/n return (data - data.min()) / (data.max() - data.min())/n/n# 对数据进行归一化/ndata['涨跌幅'] = min_max_scale(data['涨跌幅'])/n/n/n# Z-score规范化/ndef z_score_scale(data):/n return (data - data.mean()) / data.std()/n/n# 对数据进行归一化/ndata['涨跌幅'] = z_score_scale(data['涨跌幅'])/n/n# 数据标准化/n/nfrom scipy.stats import boxcox/n/n# Box-Cox变换/n# 需要保证数据为正数,如果数据中存在负数,则需要先进行平移操作/ndata['涨跌幅'] = data['涨跌幅'] - data['涨跌幅'].min() + 1/ndata['涨跌幅'], _ = boxcox(data['涨跌幅'])/n/n# 对数据进行标准化/ndata['涨跌幅'] = z_score_scale(data['涨跌幅'])/n/n/nfrom scipy.stats import yeojohnson/n/n/n# Yeo-Johnson变换/n# 需要保证数据为正数,如果数据中存在负数,则需要先进行平移操作/ndata['涨跌幅'] = data['涨跌幅'] - data['涨跌幅'].min() + 1/ndata['涨跌幅'], _ = yeojohnson(data['涨跌幅'])/n/n# 对数据进行标准化/ndata['涨跌幅'] = z_score_scale(data['涨跌幅'])/n/n/n### 卷积神经网络 (CNN) 模型/n/n代码展示了使用CNN模型进行股票价格预测的过程。首先,将每日的开盘价、收盘价、最高价和最低价作为特征,构建二维数组。然后,定义CNN模型,并对数据进行预处理和拟合。最后,使用训练好的模型进行预测,并打印预测结果。/n/npython/n#这段代码使用的是一个简单的卷积神经网络(CNN)模型。/nimport pandas as pd/nimport numpy as np/nfrom keras.models import Sequential/nfrom keras.layers import Conv1D, MaxPooling1D, Flatten, Dense, Dropout/n/n# 加载数据/ndata = pd.read_excel('E:/pythonProject5/深度学习/新建 XLS 工作表.xls')/n/n# 提取每日开盘价、收盘价、最高价和最低价/nopen_prices = data['开盘'].values/nclose_prices = data['收盘'].values/nhigh_prices = data['最高'].values/nlow_prices = data['最低'].values/n/n# 将价格数据转换为二维数组/nprices = np.array([open_prices, close_prices, high_prices, low_prices])/nprices = np.transpose(prices)/n/n# 定义CNN模型/nmodel = Sequential()/nmodel.add(Conv1D(64, 3, activation='relu', input_shape=(prices.shape[1], 1)))/nmodel.add(MaxPooling1D(1)) # 修改池化窗口大小为1/nmodel.add(Conv1D(32, 3, activation='relu', padding='same'))/nmodel.add(MaxPooling1D(2))/nmodel.add(Flatten())/nmodel.add(Dense(64, activation='relu'))/nmodel.add(Dropout(0.5))/nmodel.add(Dense(1, activation='linear'))/n/nmodel.summary()/n/n# 将数据转换为三维数组/nprices = np.expand_dims(prices, axis=2)/n/n# 编译模型/nmodel.compile(loss='mse', optimizer='adam')/n/n# 拟合模型/nmodel.fit(prices, close_prices, epochs=50, batch_size=16, verbose=1)/n/n# 提取特征/nfeatures = model.predict(prices)/n/nprint(features)/n/n/n### 线性回归模型/n/n代码还展示了使用线性回归模型进行股票价格预测的过程。通过选择特征和目标变量,划分训练集和测试集,训练模型并进行预测,可以得到预测结果。最后,计算均方误差(MSE)并绘制预测价格和实际价格的图像,以验证模型的准确性。/n/npython/nimport pandas as pd/nimport numpy as np/nfrom sklearn.preprocessing import MinMaxScaler/nfrom tensorflow.keras.models import Sequential/nfrom tensorflow.keras.layers import Dense, Conv1D, MaxPooling1D, Flatten/n/n# 读取Excel数据/ndata = pd.read_excel('E:/pythonProject5/深度学习/新建 XLS 工作表.xls')/n/n# 提取股票价格列/nprices = data['收盘'].values/n/n# 数据归一化/nscaler = MinMaxScaler(feature_range=(0, 1))/nscaled_prices = scaler.fit_transform(prices.reshape(-1, 1))/n/n# 创建训练集和测试集/ntrain_size = int(len(scaled_prices) * 0.8)/ntrain_data = scaled_prices[:train_size]/ntest_data = scaled_prices[train_size:]/n/n# 构建时间序列数据/ndef create_sequences(data, seq_length):/n X = []/n y = []/n for i in range(len(data)-seq_length):/n X.append(data[i:i+seq_length])/n y.append(data[i+seq_length])/n return np.array(X), np.array(y)/n/nseq_length = 10/nX_train, y_train = create_sequences(train_data, seq_length)/nX_test, y_test = create_sequences(test_data, seq_length)/n/n# 构建卷积神经网络模型/nmodel = Sequential()/nmodel.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(seq_length, 1)))/nmodel.add(MaxPooling1D(pool_size=2))/nmodel.add(Flatten())/nmodel.add(Dense(50, activation='relu'))/nmodel.add(Dense(1))/n/n# 编译模型/nmodel.compile(optimizer='adam', loss='mse')/n/n# 训练模型/nmodel.fit(X_train, y_train, epochs=50, batch_size=16)/n/n# 使用模型进行预测/npredicted_prices = model.predict(X_test)/n/n# 反归一化/npredicted_prices = scaler.inverse_transform(predicted_prices)/n/n# 打印预测结果/nfor i in range(len(predicted_prices)):/n print('Predicted:', predicted_prices[i], 'Actual:', test_data[i+seq_length])/n/n/n### 模型评估/n/npython/n#使用交叉验证方法对训练好的模型进行评估并计算准确率、精度等指标:/nfrom sklearn.datasets import load_iris/nfrom sklearn.linear_model import LogisticRegression/nfrom sklearn.model_selection import cross_val_score/n/n# 加载数据/niris = load_iris()/nX_train = iris.data/ny_train = iris.target/n/n# 定义模型/nmodel = LogisticRegression(max_iter=1000) # 增加最大迭代次数/n/n# 使用交叉验证方法对模型进行评估/nscores = cross_val_score(model, X_train, y_train, cv=5) # 5折交叉验证/n/n# 计算准确率、精度、召回率和F1分数的平均值/naccuracy = scores.mean()/nprecision = cross_val_score(model, X_train, y_train, cv=5, scoring='precision_macro').mean()/nrecall = cross_val_score(model, X_train, y_train, cv=5, scoring='recall_macro').mean()/nf1 = cross_val_score(model, X_train, y_train, cv=5, scoring='f1_macro').mean()/n/n# 打印评估结果/nprint('准确率:', accuracy)/nprint('精度:', precision)/nprint('召回率:', recall)/nprint('F1分数:', f1)/n/n/n### 股票价格预测示例/n/npython/nimport pandas as pd/nfrom sklearn.model_selection import train_test_split/nfrom sklearn.linear_model import LinearRegression/nfrom sklearn.metrics import mean_squared_error/n/n# 读取数据集/ndata = pd.read_excel('E:/pythonProject5/深度学习/新建 XLS 工作表.xls')/n/n# 选择特征和目标变量/nfeatures = data[['开盘', '涨跌额', '涨跌幅', '最低', '最高', '成交量', '成交金额']]/ntarget = data['收盘']/n/n# 划分训练集和测试集/nX_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)/n/n# 训练模型/nmodel = LinearRegression()/nmodel.fit(X_train, y_train)/n/n# 预测股票价格/npredictions = model.predict(X_test)/n/n# 对比实际价格进行验证/nmse = mean_squared_error(y_test, predictions)/nprint('均方误差(MSE):', mse)/n/n# 输出预测结果和实际价格/nresult = pd.DataFrame({'预测价格': predictions, '实际价格': y_test})/nprint(result)/n/n/n### 预测结果可视化/n/npython/nimport matplotlib.pyplot as plt/n/nplt.rcParams['font.sans-serif'] = ['SimHei'] # 指定使用SimHei字体/nplt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题/n/n# 绘制预测价格和实际价格的图像/nplt.plot(result.index, result['预测价格'], label='预测价格')/nplt.plot(result.index, result['实际价格'], label='实际价格')/nplt.xlabel('样本编号')/nplt.ylabel('股票价格')/nplt.title('预测价格 vs 实际价格')/nplt.legend()/nplt.show()/n/n/n### 总结/n/n综上所述,深度学习在股票价格预测中的应用研究包括数据清洗和预处理,以及使用CNN和线性回归模型进行预测。这些方法可以帮助投资者和金融机构更准确地预测股票价格,从而做出更明智的投资决策。/n/n注意: 股票价格预测是一个复杂的任务,受到多种因素的影响。上述代码仅提供了一种简单的示例,实际应用中可能需要更复杂的模型和更丰富的特征。此外,需要进行充分的模型评估和验证,才能确保模型的可靠性和准确性。
原文地址: https://www.cveoy.top/t/topic/f4d0 著作权归作者所有。请勿转载和采集!