支持向量机预测股票价格结果输出

用下面这个代码对股票价格进行预测,想要得到一个收盘价的预测结果的表格,请问应该怎么做


import pandas as pd
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
data=pd.read_excel(r'C:\Users\86159\Desktop\五粮液.xlsx')
X = data['日期'].values.reshape(-1,1)
y = data['收盘'].values.reshape(-1,1)
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
y = scaler.fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=42)
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_rbf.fit(X_train, y_train)
y_pred = svr_rbf.predict(X_test)
r2 = r2_score(y_test, y_pred)
print('R-squared:', r2)

img

生成未来日期

future_dates = pd.date_range(start='2022-12-26', end='2022-12-31')

print(future_dates)

print(len(future_dates))
test_x=[round(random.randint(8,24)+random.uniform(0,1),2) for _ in range(len(future_dates))]

result_df = pd.DataFrame({'y_test':y_test.reshape(-1),'y_pred':y_pred.reshape(-1)})
即可

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7667436
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:在训练前标准化了训练集和测试集,训练完了以后,抽取未标准化的一条数据进行预测,结果出了问题
  • 除此之外, 这篇博客: 求解驾驶时间和等待时间,复现【城市纯电动汽车快速充电设施的布局选址优化模型研究】论文中的排队模型中的 复现代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 下面展示一些 内联代码片

    
    import numpy as np
    
    def driving_time_one_moment(W_I,M_J,TRAVELTIME_IJ,Y_IJ):
        print(np.sum(np.dot(np.dot(W_I,Y_IJ),TRAVELTIME_IJ.T)))
        return np.sum(np.dot(np.dot(W_I,Y_IJ),TRAVELTIME_IJ.T))
    
    def waiting_time_one_moment(W_I,M_J,TRAVELTIME_IJ,Y_IJ):
        tc=8           # 服务时间,24小时提供服务;
        tf=2           #每辆车充电时长;
        # 第一步:计算用户达到率
        Tao_J=np.dot(W_I,Y_IJ/tc)
    
        # 第二步:单位时间内充电站平均服务能力
        U_J=M_J/tf
    
        # 第三步:充电站排队系统服务强度:,由于ROU_J会存在大于1的情况,从而会促使后面求解
        ROU_J=Tao_J/U_J
    
        # 第四步:充电站内充电桩全部空闲概率:
        P_J=np.full(shape=(1,M_J.shape[1]),fill_value=0.0)
        for j in range(M_J.shape[1]):
            temp = 0
            for k in range(M_J.shape[1]):
                temp+=(np.power(M_J[0,j]*ROU_J[0,j],k))/(np.math.factorial(k))
            p_j0=1/(temp+(np.power(M_J[0,j]*ROU_J[0,j],M_J[0,j]))/(np.math.factorial(M_J[0,j])*(1-ROU_J[0,j])))
            P_J[0,j]=p_j0
    
        # 第五步:计算排队等候时间期望
        W_Jq=np.full(shape=(1,M_J.shape[1]),fill_value=0.0)
        for j in range(M_J.shape[1]):
            w_jq=(np.power(M_J[0,j],M_J[0,j])*np.power(ROU_J[0,j],M_J[0,j]+1)*P_J[0,j])/(ROU_J[0,j]*np.math.factorial(M_J[0,j])*np.power(1-ROU_J[0,j],2))
            W_Jq[0,j]=w_jq
    
        # 第六步:所有用户的总的等待花费时间
        T2=0
        for j in range(M_J.shape[1]):
            T2+=W_Jq[0,j]*Tao_J[0,j]*tc
        print(T2)
    
    if __name__ == '__main__':
        # 需求量;
        W_I = np.array([[10, 20, 30, 50]])
        # 充电桩供给量;
        M_J = np.array([[5, 10, 15]])
        # 行是demand,列是provider
        TRAVELTIME_IJ = np.array([[1, 1.5, 2.5],
                                  [1.5, 1, 2],
                                  [1, 1.5, 1],
                                  [2.5, 1.5, 1]])
        # 出行时间的阻尼函数,衰减函数
        F_DIJ = 1 / TRAVELTIME_IJ
        Sum_Dij_I = np.sum(F_DIJ, axis=1)
        # 计算选择权重
        Y_IJ = np.full(shape=(TRAVELTIME_IJ.shape), fill_value=0.0)
        for i in range(W_I.shape[1]):
            Y_IJ[i, :] = F_DIJ[i, :] / Sum_Dij_I[i]
    
        # 计算驾车时间
        driving_time_one_moment(W_I,M_J,TRAVELTIME_IJ,Y_IJ)
        # 计算等候时间
        waiting_time_one_moment(W_I,M_J,TRAVELTIME_IJ,Y_IJ)
    
  • 您还可以看一下 刘建萍老师的人工智能系列课程零基础讲解知识点和实例应用线性回归梯度下降逻辑回归课程中的 讲解机器学中会涉及到的有关数学方面的知识储备有哪些小节, 巩固相关知识点
该回答引用ChatGPT
根据代码预测股票价格,可以将预测结果与实际结果放在一个DataFrame中,生成一个表格输出预测结果,代码如下:

python
# 将测试集和预测结果合并成一个DataFrame
df=pd.DataFrame({'Actual':y_test.flatten(),'Predicted':y_pred.flatten()})
# 输出前10行数据
print(df.head(10))


其中,`y_test.flatten()`表示将实际结果展开为一维数组,`y_pred.flatten()`表示将预测结果展开为一维数组。运行完整的代码如下:

python
import pandas as pd
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
data=pd.read_excel(r'C:\Users\86159\Desktop\五粮液.xlsx')
X = data['日期'].values.reshape(-1,1)
y = data['收盘'].values.reshape(-1,1)
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
y = scaler.fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=42)
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_rbf.fit(X_train, y_train)
y_pred = svr_rbf.predict(X_test)
r2 = r2_score(y_test, y_pred)
print('R-squared:', r2)

# 将测试集和预测结果合并成一个DataFrame
df=pd.DataFrame({'Actual':y_test.flatten(),'Predicted':y_pred.flatten()})
# 输出前10行数据
print(df.head(10))


运行代码后,会输出预测结果的DataFrame,其中Actual列为实际结果,Predicted列为对应日期的预测结果。

引用chatGPT作答,要预测未来的股票收盘价,需要将未来的日期作为输入,而不是使用现有的日期。可以使用 pandas 的 date_range 函数来生成未来日期的时间序列。然后,使用相同的 MinMaxScaler 对日期进行缩放,并将其转换为 numpy 数组。最后,使用训练好的 SVR 模型来预测收盘价。

以下是一个示例代码,它生成未来 30 天的日期,并使用模型预测这些日期的收盘价:

import pandas as pd
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

# 读取数据
data=pd.read_excel(r'C:\Users\86159\Desktop\五粮液.xlsx')

# 特征和目标变量
X = data['日期'].values.reshape(-1,1)
y = data['收盘'].values.reshape(-1,1)

# 缩放数据
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
y = scaler.fit_transform(y)

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练模型
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_rbf.fit(X_train, y_train)

# 预测测试集
y_pred = svr_rbf.predict(X_test)
r2 = r2_score(y_test, y_pred)
print('R-squared:', r2)

# 生成未来日期
future_dates = pd.date_range(start='2023-05-09', end='2023-06-07')

# 缩放未来日期并转换为 numpy 数组
future_dates_scaled = scaler.transform(future_dates.values.reshape(-1,1))

# 预测未来收盘价
future_close_prices = svr_rbf.predict(future_dates_scaled)

# 将预测结果和日期转换为 DataFrame,并保存到 Excel 文件中
future_df = pd.DataFrame({'日期': future_dates, '收盘': future_close_prices})
future_df.to_excel('predicted_prices.xlsx', index=False)

在上面的代码中,将未来 30 天的日期存储在 future_dates 变量中,从 2023 年 5 月 9 日到 2023 年 6 月7 日。然后,使用 MinMaxScaler 对这些日期进行缩放,并将它们转换为 numpy 数组,存储在 future_dates_scaled 变量中。

接下来,使用训练好的 SVR 模型对缩放后的未来日期进行预测,得到未来 30 天的收盘价,存储在 future_close_prices 变量中。

最后,将预测结果和日期转换为 pandas 的 DataFrame,并将其保存到 Excel 文件中,以便进一步分析和可视化。