データ分析と予測コード

AS NP numpyのインポート
インポートPANDAS AS PD 
インポートAS PLT matplotlib.pyplot 
インポートトーチ


plt.rcParams [ 'セリフ-font.sansを'] = [」SimHei ']#表示適切に定義された中国語は太字
plt.rcParams ['軸。 unicode_minus'] = Falseの#は通常の表示に負の符号を示し
#インポートデータ
RMB_EU.xltx 『=ファイル名』
DF = pd.read_excel(=コードファイル名、 『UTF-を8』)
###抽出試験データに
データ= df.loc [:[ '時間'、 '高い']] [:]と#2回の最大の値抽出
データ
の##の正規化方法の最大値と最小値
データ[ 'ハイ'] =(データ[ 'ハイ'] -dataを[ '高'] .min())/(データ[ ' ハイ'] .MAX() -データ[ ' ハイ'] .min())
DEF create_dataset(データセット、len_x = 7、len_y = 7):
    [データX]、[データY] 、data_Z = []、[] 、[] 
    のIの範囲内(LEN(データセット) - (+ len_x len_y)+ 1):
        A =データセット[I:(I + len_x)]
        data_X.append()
        B =データセット[(I + len_x):( I + len_x + len_y)] 
        (B)data_Y.append 
    範囲のiについて(LEN(データセット) - (+ len_x len_y)+1、lenの(データセット)-len_x + 1):
        A =データセット[I:(I + len_x)] 
        data_Z.append()
    戻りnp.array(データX)、np.array(データY)、np.array(data_Z) 构建数据集
X、Y、Z = create_dataset(データ[ '高']、30、30)
train_size = INT(LEN(X)* 0.7)
test_size = LEN(X) - train_size 

train_X = X [:train_size] 
train_Y = Y [ :train_size] 
test_X = X [train_size:] 
test_Y = Y [train_size:] 
train_X.shape、train_Y.shape、test_X.shape、test_Y.shape、Z.shape 
#设置数据形状
train_X = train_X.reshape(-1、1 、30)
train_Y = train_Y.reshape(-1、1、30)
test_X = test_X.reshape(-1、1、30)
#test_Y = test_Y.reshape(-1、1、7)

pred_Z = Z.reshape(-1、1 、30) 
转换为テンソル类型
train_X = torch.from_numpy(train_X)
train_Y = torch.from_numpy(train_Y)
test_X = torch.from_numpy(test_X)
#test_Y = torch.from_numpy(test_Y)

pred_Z = torch.from_numpy(pred_Z)

使用CUDA 
train_X = train_X.cuda()
train_Y = train_Y.cuda()
test_X = test_X.cuda()
#test_Y = test_Y.cuda()

pred_Z = pred_Z.cuda()
トーチインポートNNから
torch.autogradインポート変数から
RNN = nn.LSTM(30,30,2).cuda()
RNN = rnn.double()#数据类型问题 
基準= nn.MSELoss()
オプティマイザ= torch.optim.Adam(rnn.parameters()、LR = 1E-2)
#スタート練習
中範囲Eのための(50):
    var_X =可変(train_X)
    var_Y =可変(train_Y)
    伝搬する#の前に
    OUT、(H、C)= RNN(var_X)
    損失=基準(OUT、var_Y) リバース伝搬
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    印刷( 'エポック:{}、損失:{:} .5f'。。フォーマット(E + 1、loss.data [0]))
モデル= RNN .eval()#は、テストモードに変換さ
var_data =可変(test_X)
pred_test、予測結果(TH、TC)=モデル( var_data)#のテストセット
pred_test pred_test.reshape =(-1、30)
pred_test pred_test.cpu =( )
pred_test pred_test.detach =()。numpyの()
pred_test 
#予測結果と実際の結果が示さ
plt.figure(figsize =(12,8))
plt.plot(データ[ '时间'] [train_size:-59]、pred_test [:]、[6]、R ''、ラベル= 'トレイン')
#1 plt.plot(データ[ '时间'] [train_size:-29 ]、pred_t、R ''、ラベル= '予測')
plt.plot(データ[ '时间'] [train_size:-59]、test_Y [:]、[6]、 'B'、ラベル= '実際の')
PLT。プロット(データ[ '时间'] [ - 30:]、pred_1、 'G'、ラベル= '予測')
plt.legend(LOC = '最良の') 预测结果
PRED、(_、_)=モデル(pred_Z )
PRED = pred.cpu()
PRED = pred.detach()。numpyの()
PRED = pred.reshape(-1、30)
pred_1 = np.mean(predは、軸= 1)
pred_1.shape 
plt.plot(データ[ '时间'] [ - 30:]、pred_1、 '-g'、ラベル= '新しいです')

  

おすすめ

転載: www.cnblogs.com/kriswang/p/12121753.html