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

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

新規登録して質問してみよう
ただいま回答率
85.48%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1371閲覧

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

tsugumi_7788

総合スコア31

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2020/08/25 06:41

編集2020/08/25 23:33

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

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

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

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

python

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

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

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

予測 日平均気温

python

1print(X_train) 2print(X_test) 3print(y_train) 4print(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]

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

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

python

1x_train2 = x_data[0:730] 2x_test2 = x_data[730:1096] 3y_train2 = y_data[0:730] 4y_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]

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2020/08/25 07:03 編集

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

2020/08/25 10:47

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

回答3

0

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

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

投稿2020/08/25 17:40

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2020/08/25 10:04

aokikenichi

総合スコア2218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsugumi_7788

2020/08/25 10:40

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

2020/08/26 00:10

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

0

ベストアンサー

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

投稿2020/08/25 07:57

stu

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsugumi_7788

2020/08/25 10:27

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

2020/08/25 10:55

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問