“”"
@Time : 19-10-1 上午7:32
@Author : lei
@Site :
@File : 神经网络预测股票.py
@Software: PyCharm
“”"
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import Ridge
class Stock(object):
def init(self, file_path):
self.file_path = file_path
def read_data(self):
return pd.read_csv(self.file_path)
# 特征工程
def feature_select(self, data):
# print(data)
# print(data.corr())
data.drop("index_code", axis=1, inplace=True)
data.set_index("date", drop=True, inplace=True)
data.astype(np.float)
# print(data.info())
x_train, x_test, y_train, y_test = train_test_split(data.iloc[:, 0:7], data.iloc[:, 7], test_size=0.25)
# print(x_test)
mm_x = MinMaxScaler()
x_train = mm_x.fit_transform(x_train)
x_test = mm_x.transform(x_test)
mm_y = MinMaxScaler()
y_train = mm_y.fit_transform(np.array(y_train).reshape(-1, 1))
y_test = mm_y.transform(np.array(y_test).reshape(-1, 1))
# print(mm_x)
return mm_y, x_train, x_test, y_train, y_test
def neural_network(self, mm_y, x_train, x_test, y_train, y_test):
mlp = MLPRegressor(hidden_layer_sizes=(7, 3), solver="sgd", max_iter=2000)
mlp.fit(x_train, y_train)
y_predict = mm_y.inverse_transform(np.array(mlp.predict(x_test)).reshape(-1, 1))
y_mean_squared = mean_squared_error(mm_y.inverse_transform(y_test), y_predict)
print("神经网络预测结果为:", y_predict)
print("预测的均方误差为:", y_mean_squared)
print("预测的平均误差为:", y_mean_squared ** 0.5)
print("--"*50)
# 岭回归进行预测
def ridge_regression(self, mm_y, x_train, x_test, y_train, y_test):
rg = Ridge(alpha=0.01)
rg.fit(x_train, y_train)
y_predict = mm_y.inverse_transform(np.array(rg.predict(x_test)).reshape(-1, 1))
y_mean_squared = mean_squared_error(mm_y.inverse_transform(y_test), y_predict)
print("岭回归预测结果为:", y_predict)
print("预测的均方误差为:", y_mean_squared)
print("预测的平均误差为:", y_mean_squared ** 0.5)
print("--" * 50)
# 主逻辑函数
def run(self):
data = self.read_data()
# 特征工程
mm_y, x_train, x_test, y_train, y_test = self.feature_select(data)
# 神经网络进行预测
self.neural_network(mm_y, x_train, x_test, y_train, y_test)
# 岭回归进行预测
self.ridge_regression(mm_y, x_train, x_test, y_train, y_test)
def main():
temp = Stock("./stock_dataset.csv")
temp.run()
if name == “main”:
main()