Python多項式回帰のプロットが間違っていますか?

G_EXL_snake

ブロッククォート

Pythonは初めてで、一部のデータで3次多項式回帰を完了しようとしています。多項式回帰を使用すると、期待する適合が得られません。私は、Pythonの多項式回帰がExcelよりも悪い理由を理解しようとしています。同じデータをExcelに当てはめると、決定係数は約.95になり、プロットは3次多項式のようになります。ただし、sickitlearnを使用すると、約.78であり、フィットはほぼ線形に見えます。十分なデータがないためにこれが発生していますか?また、x軸にdatetime64 [ns] typeとしてxを設定すると、回帰に影響しますか?コードが実行されます。ただし、これがコーディングの問題なのか、その他の問題なのかはわかりません。

私はanaconda(python 3.7)を使用しており、spyderでコードを実行しています

import operator
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
#import data
data = pd.read_excel(r'D:\Anaconda\Anaconda\XData\data.xlsx', skiprows = 0)

x=np.c_[data['Date']]
y=np.c_[data['level']]
#regression
polynomial_features= PolynomialFeatures(degree=3)
x_poly = polynomial_features.fit_transform(x)

model = LinearRegression()
model.fit(x_poly, y)
y_poly_pred = model.predict(x_poly)
#check regression stats
rmse = np.sqrt(mean_squared_error(y,y_poly_pred))
r2 = r2_score(y,y_poly_pred)
print(rmse)
print(r2)

#plot
plt.scatter(x, y, s=10)

# sort the values of x b[![enter image description here][1]][1]efore line plot
sort_axis = operator.itemgetter(0)
sorted_zip = sorted(zip(x,y_poly_pred), key=sort_axis)
x, y_poly_pred = zip(*sorted_zip)
plt.plot(x, y_poly_pred, color='m')
plt.show()

Pythonプロット

ここに画像の説明を入力してください

Vadim Shkaberda

問題は、datetime64[ns]x軸でタイプを使用することですgithubにdatetime64[ns]内部での処理方法に関する問題がありsklearnます。事をされるdatetime64[ns]機能は、この場合には1018のための機能として、スケールされています。

x_poly
Out[91]: 
array([[1.00000000e+00, 1.29911040e+18, 1.68768783e+36, 2.19249281e+54],
       [1.00000000e+00, 1.33617600e+18, 1.78536630e+36, 2.38556361e+54],
       [1.00000000e+00, 1.39129920e+18, 1.93571346e+36, 2.69315659e+54],
       [1.00000000e+00, 1.41566400e+18, 2.00410456e+36, 2.83713868e+54],
       [1.00000000e+00, 1.43354880e+18, 2.05506216e+36, 2.94603190e+54],
       [1.00000000e+00, 1.47061440e+18, 2.16270671e+36, 3.18050764e+54],
       [1.00000000e+00, 1.49670720e+18, 2.24013244e+36, 3.35282236e+54],
       [1.00000000e+00, 1.51476480e+18, 2.29451240e+36, 3.47564662e+54],
       [1.00000000e+00, 1.57610880e+18, 2.48411895e+36, 3.91524174e+54]])

それを処理する最も簡単な方法は、それを使用StandardScalerして日時を使用または変換しpd.to_numeric、それをスケーリングすることです。

scaler = StandardScaler()
x_scaled = scaler.fit_transform(np.c_[data['Date']])

または単に

x_scaled = np.c_[pd.to_numeric(data['Date'])] / 10e17  # convert and scale

これにより、適切にスケーリングされた機能が提供されます。

x_poly = polynomial_features.fit_transform(x_scaled)
x_poly
Out[94]: 
array([[1.        , 1.2991104 , 1.68768783, 2.19249281],
       [1.        , 1.336176  , 1.7853663 , 2.38556361],
       [1.        , 1.3912992 , 1.93571346, 2.69315659],
       [1.        , 1.415664  , 2.00410456, 2.83713868],
       [1.        , 1.4335488 , 2.05506216, 2.9460319 ],
       [1.        , 1.4706144 , 2.16270671, 3.18050764],
       [1.        , 1.4967072 , 2.24013244, 3.35282236],
       [1.        , 1.5147648 , 2.2945124 , 3.47564662],
       [1.        , 1.5761088 , 2.48411895, 3.91524174]])

編集xプロットのためにあなた保ちます予測を行うには、予測する機能に同じ変換を適用する必要があります。その後、結果は次のようになります。

x = np.c_[data['Date']]
x_scaled = np.c_[pd.to_numeric(data['Date'])] / 10e17  # convert and scale
polynomial_features = PolynomialFeatures(degree=3)
x_poly = polynomial_features.fit_transform(x_scaled)

model = LinearRegression()
model.fit(x_poly, y)
y_poly_pred = model.predict(x_poly)

# test to predict
s_test = pd.to_datetime(pd.Series(['1/1/2013', '5/5/2019']))
x_test = np.c_[s_test]
x_poly_test = polynomial_features.transform(np.c_[pd.to_numeric(s_test)] / 10e17)
y_test_pred = model.predict(x_poly_test)

plt.scatter(x, y, s=10)
# plot predictions as red dots
plt.scatter(x_test, y_test_pred, s=10, c='red')
plt.plot(x, y_poly_pred, color='m')
plt.show()

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonの指数プロットが間違っています

分類Dev

多項式回帰(C ++、GNUPLOT)の最急降下法の何が問題になっていますか

分類Dev

np.polyfitを使用して多項式回帰によって生成された曲線に沿って接線を計算してプロットします

分類Dev

多項式回帰プロットが正しく表示されない

分類Dev

多項式回帰プロットが正しく表示されない

分類Dev

Rでの多項式回帰曲線のプロット

分類Dev

三項(条件付き)式のタイプが間違っています

分類Dev

Rで多項式回帰曲線をプロットする

分類Dev

Haskellプログラムのクラッシュ-無限再帰?どこのステートメントが間違っていますか?

分類Dev

Tensorflowを使用して間違った答えを与える多項式回帰

分類Dev

再帰プログラム:何が間違っているのですか?

分類Dev

生のPCMのFFTプロットは、Pythonの周波数が高いほど間違っています

分類Dev

2つのnumpy配列をプロットしようとすると、何が間違っていますか?

分類Dev

多項式回帰プロットと「newdata」エラー

分類Dev

プロトコルバッファの設定が間違っていますか?

分類Dev

Rの時系列に多項式回帰直線をプロットする方法は?

分類Dev

Pythonでの多項式回帰(リストが正しくない場合は機能しません)

分類Dev

ラップトップがRAMスロットの数が間違っていると報告していますか?

分類Dev

python pyqtmatplotlib計算GUIアプリのプロットが間違っている

分類Dev

ロジスティック回帰の間違ったプロット

分類Dev

Jquery UIの位置:トップオフセットが間違っています

分類Dev

MATLAB-多項式補間を実行しようとしていますが、(ほぼ)ゼロでいっぱいの行列が得られます

分類Dev

多項式回帰の信頼区間

分類Dev

パニック/スロー/キャッチとして回復するのは間違っていますか

分類Dev

Rの画像にプロットするときの出力サイズが間違っています

分類Dev

アップロードスクリプトで何が間違っているのですか

分類Dev

c ++ブーストtribool三項演算子の値が間違っています

分類Dev

C ++:ビットマップの読み取りが間違っています

分類Dev

FirebasequeryOrderedbyChildのスナップショットが間違っています

Related 関連記事

  1. 1

    Pythonの指数プロットが間違っています

  2. 2

    多項式回帰(C ++、GNUPLOT)の最急降下法の何が問題になっていますか

  3. 3

    np.polyfitを使用して多項式回帰によって生成された曲線に沿って接線を計算してプロットします

  4. 4

    多項式回帰プロットが正しく表示されない

  5. 5

    多項式回帰プロットが正しく表示されない

  6. 6

    Rでの多項式回帰曲線のプロット

  7. 7

    三項(条件付き)式のタイプが間違っています

  8. 8

    Rで多項式回帰曲線をプロットする

  9. 9

    Haskellプログラムのクラッシュ-無限再帰?どこのステートメントが間違っていますか?

  10. 10

    Tensorflowを使用して間違った答えを与える多項式回帰

  11. 11

    再帰プログラム:何が間違っているのですか?

  12. 12

    生のPCMのFFTプロットは、Pythonの周波数が高いほど間違っています

  13. 13

    2つのnumpy配列をプロットしようとすると、何が間違っていますか?

  14. 14

    多項式回帰プロットと「newdata」エラー

  15. 15

    プロトコルバッファの設定が間違っていますか?

  16. 16

    Rの時系列に多項式回帰直線をプロットする方法は?

  17. 17

    Pythonでの多項式回帰(リストが正しくない場合は機能しません)

  18. 18

    ラップトップがRAMスロットの数が間違っていると報告していますか?

  19. 19

    python pyqtmatplotlib計算GUIアプリのプロットが間違っている

  20. 20

    ロジスティック回帰の間違ったプロット

  21. 21

    Jquery UIの位置:トップオフセットが間違っています

  22. 22

    MATLAB-多項式補間を実行しようとしていますが、(ほぼ)ゼロでいっぱいの行列が得られます

  23. 23

    多項式回帰の信頼区間

  24. 24

    パニック/スロー/キャッチとして回復するのは間違っていますか

  25. 25

    Rの画像にプロットするときの出力サイズが間違っています

  26. 26

    アップロードスクリプトで何が間違っているのですか

  27. 27

    c ++ブーストtribool三項演算子の値が間違っています

  28. 28

    C ++:ビットマップの読み取りが間違っています

  29. 29

    FirebasequeryOrderedbyChildのスナップショットが間違っています

ホットタグ

アーカイブ