質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.62%

機械学習(Python) 精度が良すぎる

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 875

tsugumi_7788

score 12

札幌市の日平均気温を機械学習を使って予測してみたのですが精度が良すぎて正しく予測できているか怪しいです。初学者なもので原因がさっぱり思いつきません。どなたか可能性の一つや二つ教えていただけると幸いです。

使用したデータ:気象庁のデータ2017~2019年 2017~2018を訓練データ、2019をテストデータに

結果: 訓練スコア: 0.9969811253623244  テストスコア: 0.9965872433096741

2019実際の気温変化
イメージ説明

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)


**データ操作に不備はないことを確認したのでその部分のコードは省きます。

入力データ
ex [2.6, 3.3, -2.9, 64.0, 1011.6, 8.0] = [日照時間、最高気温、最低気温、平均湿度、平均現地気圧、平均雲量]

予測 日平均気温

print(X_train)
print(X_test)
print(y_train)
print(y_test)

X_train

[[ 8.0000e-01  1.6000e+00 -5.7000e+00  7.0000e+01  1.0160e+03  8.0000e+00]
[ 2.6000e+00  3.3000e+00 -2.9000e+00  6.4000e+01  1.0116e+03  8.0000e+00]
[ 6.0000e-01  8.0000e-01 -3.7000e+00  8.4000e+01  1.0112e+03  8.0000e+00]
...
[ 3.0000e+00 -1.0000e+00 -5.1000e+00  6.3000e+01  1.0036e+03  8.0000e+00]
[ 5.0000e-01  8.0000e-01 -4.5000e+00  7.6000e+01  1.0132e+03  8.0000e+00]
[ 1.0000e-01  5.0000e-01 -3.6000e+00  8.5000e+01  1.0204e+03  8.0000e+00]]

X_test

[[ 1.3000e+00 -5.0000e-01 -3.1000e+00  7.3000e+01  1.0138e+03  8.0000e+00]
[ 4.9000e+00 -6.0000e-01 -7.0000e+00  6.8000e+01  1.0139e+03  8.0000e+00]
[ 4.0000e-01 -8.0000e-01 -8.1000e+00  6.6000e+01  1.0180e+03  8.0000e+00]
...
[ 1.6000e+00  7.4000e+00 -5.8000e+00  7.6000e+01  1.0165e+03  8.0000e+00]
[ 3.8000e+00  8.1000e+00 -7.1000e+00  7.3000e+01  1.0030e+03  8.0000e+00]
[ 2.0000e-01 -4.1000e+00 -7.3000e+00  7.6000e+01  1.0093e+03  8.0000e+00]]

y_train

[-2.   0.1 -1.2 -2.5 -4.1 -4.3 -1.2 -2.7 -1.2 -4.2 -8.5 -8.6 -8.1 -7.7
-5.5 -0.1 -3.  -2.4 -2.6 -4.  -4.9 -5.6 -5.  -9.1 -5.5 -2.4  0.7 -4.3
-2.7 -3.2 -5.  -4.1 -7.7 -4.6 -0.1 -0.4 -0.8 -3.1 -1.2 -0.9 -1.5 -1.7
...
3.5  6.8 10.1  2.2 -0.9 -3.2 -5.9 -5.8 -5.5 -3.9 -3.1 -3.6 -2.6 -1.4
2.7  1.6 -0.8 -1.2 -1.8  0.7  1.6  1.8 -2.8 -1.3 -1.9 -7.2 -4.7 -3.5
-0.9 -1.2]

y_test

[ -1.9  -4.1  -3.3  -0.2  -2.2  -3.   -4.8  -3.5  -2.    0.5  -3.6  -2.4
-5.1  -5.    0.1  -3.   -7.9  -5.   -1.8  -2.4  -5.2  -4.3  -2.3  -1.9
-1.6  -2.8  -4.3  -0.6  -1.5  -2.1  -4.4  -7.   -5.    0.1  -1.7  -4.7
...
-1.2  -5.1  -3.6  -3.6  -1.   -4.6  -1.8   6.3   6.8   2.7   0.1   1.4
-1.6   0.9   5.4   1.5  -1.9  -3.3  -1.3  -2.1  -3.7  -5.   -3.4  -2.9
-2.7  -4.7  -2.9   1.5  -1.1  -5.8]

皆さんのおっしゃる通りデータに不備がありそうですね…。学習データとテストデータを上に示しました。

元データは以下のように分けました。

x_train2 = x_data[0:730]
x_test2 = x_data[730:1096]
y_train2 = y_data[0:730]
y_test2 = y_data[730:1096]


名前が違うのはこの後、上のリストをX_train = np.array(x_train2)みたいに配列に変えているためです。
うーん…どうでしょうか?

説明変数を前日のデータに変えてみました。
Training set score: 0.9423408520732327
Test set score: 0.9417546025663195

係数 [ 0.08076883  0.33253482  0.62133499  0.01178906  0.08027002 -0.13845382]

なんだか少しまともになった気がします。おっしゃる通り当日のデータをインプットして当日の気温をアウトプットしていたのは予測になっていないことがわかりました。ありがとうございました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tiitoi

    2020/08/25 16:02 編集

    おそらく入力データを1時刻遅らせて予測結果としているのではないでしょうか?
    (つまり、予測しているのではなく、前の時刻の結果を真似ている)

    キャンセル

  • tsugumi_7788

    2020/08/25 19:47

    ということはやっぱり学習データですでに学習させてしまっている可能性があるということでしょうか

    キャンセル

回答 3

checkベストアンサー

0

予測日のデータを入力データとして使っているのではないでしょうか。
print(linear_regression.coef_)
を使って回帰係数を見ると、最高気温と最低気温のみに重みはついてませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/25 19:27

    [-0.02553734 0.52738036 0.4436867 -0.0019035 0.0056387 0. ] = 
    [日照時間、最高気温、最低気温、平均湿度、平均現地気圧、平均雲量]
    係数はこのようになっていました。

    キャンセル

  • 2020/08/25 19:55

    平均気温 = 0.5*最高気温 + 0.5*最低気温だとすると
    今回の結果は
    平均気温 = 0.52738036*最高気温 + 0.4436867*最低気温(他の説明変数は小さいので無視)
    ということなので、やはり予測日のデータが入力データとして使われているようです。

    前日のデータから次の日のデータを予測するには
    yを当日の平均気温
    xを前日の説明変数
    としてみてください。

    キャンセル

0

どう予測したいかに寄りますがおそらく、データ操作、に不備があります。
他の方もご指摘していますが、当日の気象データを説明変数にしてその日の 日平均気温 を予測しているのではないかと思います。

いつ時点のデータを用いて、いつ(何日後?)の予測をなさりたいのでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/25 19:40

    テストデータの予測値(2019年の1年分)と実測値を比較したいです。自分の学習モデルではインプットする観測データの日にちの平均気温がどれくらいになるかしか予測できない…でしょうかね?

    キャンセル

  • 2020/08/26 09:10

    そうではなくて、説明変数としていつまでのデータを使って、何日後の「予測値」を得たいかです。

    何日後の予測をするのでしょうか?
    当日の最高気温と最低気温をつかって当日の平均気温を予測する
    という(必要性は分かりませんが)のであれば現状でもよろしいと思います。
    でも予測であれば今日までのデータで翌日を、翌週を、、、と予測するのだと思います。
    とするとデータの与え方が間違っています。

    キャンセル

0

tsugumi_7788さんのやり取りからすると今のモデルは当日の最高気温と最低気温から当日の平均気温を計算するものになっているようです。当然のことながら、当日の最高気温と最低気温を足して2で割れば(つまり各々に0.5を掛けて加算する)だいたい平均気温になるわけで、これは予測したことになりません。
予測したいのであれば、説明変数は被説明変数よりも前の日付のデータである必要があります。aokikenichiさんの記載の通り、どのくらい過去のの説明変数から現在の被説明変数を予測させたいのかによりますが、最低でも1日はずらした組み合わせにするべきかと思います。データの作成は以下のような感じになります。(データの読み込みからの一連のコードがわからないので正しいことの保証はできません)

x_train=x_data[0:730]
y_train=y_data[1:731]

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る