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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

機械学習

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

Python

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

Q&A

解決済

1回答

1331閲覧

線形回帰の予測でエラーが出てしまう

hiro__12

総合スコア36

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

機械学習

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

Python

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

0グッド

0クリップ

投稿2019/08/15 02:24

前提・実現したいこと

下記の参考サイトを参考にして不動産の価格をTensorFlowを使って予測しました。
https://www.codexa.net/tensorflow-for-begginer/

上記サイトではScikit-learnに組み込まれているデータセットを使用していますが、
今回はデータセットの内容をcsv形式にして読み込ませています。

学習がうまくいっていないのか最終的な予測値が出てきません。
もし、お分かりになる方がいらっしゃいましたらご教授いただけましたら幸いです。

発生している問題・エラーメッセージ

参考サイトと同様に進めているのですが、
コスト関数に関する箇所と最終的な不動産の価格の予測値がNaNと表示されてしまいます。
※使用しているコードはcsvの読み込みに関わる箇所以外は参考サイトと同じです。

該当のソースコード

python

1# show upload dialog 2from google.colab import files 3uploaded = files.upload() 4 5# read data 6import pandas as pd 7import io 8boston_data = pd.read_csv(io.StringIO(uploaded['boston.csv'].decode('utf-8'))) 9boston_data.head() 10 11 CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT target 120 0.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 296.0 15.3 396.90 4.98 24.0 131 0.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 242.0 17.8 396.90 9.14 21.6 142 0.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 242.0 17.8 392.83 4.03 34.7 153 0.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 222.0 18.7 394.63 2.94 33.4 164 0.06905 0.0 2.18 0 0.458 7.147 54.2 6.0622 3 222.0 18.7 396.90 5.33 36.2 17 18# テンソルフロー 19import tensorflow as tf 20 21# 計算やデータ処理のライブラリ 22import numpy as np 23import pandas as pd 24 25# データ可視化のライブラリ 26import matplotlib.pyplot as plt 27 28# データセットの取得&処理のライブラリ 29from sklearn.model_selection import train_test_split 30 31# インポートの確認 32print(tf.__version__) 33print(np.__version__) 34print(pd.__version__) 35 361.14.0 371.16.4 380.24.2 39 40# 特徴量とターゲットに切り分け 41X_data = np.array(boston_data[["CRIM","ZN","INDUS","CHAS","NOX","RM","AGE","DIS","RAD","TAX","PTRATIO","B","LSTAT"]]) 42y_data = np.array(boston_data["target"]) 43 44 45# 1行目のデータの特徴量(X)とターゲット(y)を確認 46print(X_data[0:1]) 47print(y_data[0:1]) 48 49[[6.320e-03 1.800e+01 2.310e+00 0.000e+00 5.380e-01 6.575e+00 6.520e+01 50 4.090e+00 1.000e+00 2.960e+02 1.530e+01 3.969e+02 4.980e+00]] 51[24.] 52 53# 1を追加する前のサイズ 54print(X_data.shape) 55 56# 1を作成 57ones = np.ones((506, 1)) 58 59# 1を追加 60X_data = np.c_[ones, X_data] 61X_data.shape 62 63(506, 13) 64(506, 14) 65 66# 訓練データとテストデータへ切り分け 67X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.2, random_state=42) 68y_train = y_train.reshape(404,1) 69y_test = y_test.reshape(102,1) 70 71print(X_train.shape) 72print(y_train.shape) 73print(X_test.shape) 74print(y_test.shape) 75 76(404, 14) 77(404, 1) 78(102, 14) 79(102, 1) 80 81 82# 学習率とエポック(反復処理回数) 83learning_rate = 0.01 84training_epochs = 100 85 86# 特徴量の数 87n_dim = X_data.shape[1] 88 89# 特徴量(X)とターゲット(y)のプレースホルダー 90X = tf.placeholder(tf.float32,[None,n_dim]) 91Y = tf.placeholder(tf.float32,[None,1]) 92 93# 係数(W)と定数項(b)の変数 94W = tf.Variable(tf.ones([n_dim,1])) 95b = tf.Variable(0.0) 96 97# 線形モデル 98y = tf.add(b, tf.matmul(X, W)) 99 100# コスト関数 101cost = tf.reduce_mean(tf.square(y - Y)) 102 103# 最適化 104training_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 105 106# 初期化 107init = tf.global_variables_initializer() 108 109 110# モデル訓練開始 111sess = tf.Session() 112sess.run(init) 113 114for epoch in range(training_epochs): 115 sess.run(training_step, feed_dict={X:X_train, Y:y_train}) 116 cost_history = np.append(cost, sess.run(cost, feed_dict={X:X_train, Y:y_train})) 117 if epoch % 100 == 0: 118 W_val = sess.run(W) 119 b_val = sess.run(b) 120 121 122# 誤差(cost)を確認 123print(cost_history[0]) 124 125nan 126 127# テストデータを使って予測 128pred_test = sess.run(y, feed_dict={X: X_test}) 129 130pred = pd.DataFrame({"実際の不動産価格":y_test[:,0], "予測した不動産価格":pred_test[:,0]}) 131pred.head() 132 133 134実際の不動産価格 予測した不動産価格 1350 23.6 NaN 1361 32.4 NaN 1372 13.6 NaN 1383 22.8 NaN 1394 16.1 NaN 140

補足情報(FW/ツールのバージョンなど)

環境はgoogle colabで行っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

データの正規化を行ってください。
データのスケール (単位) がバラバラのデータですと、線形回帰のような問題を解くのは難しくなります。

データとラベルに分けた直後に以下を入れて、正規化したところ、学習後の出力結果が NaN ではなく、値が出てくることが確認できました。

python

1from sklearn.preprocessing import scale 2 3X_data = scale(X_data)

追記

cost を sess.run で計算した結果を cost_history 配列に追加していくなら
以下のようにするべきではないでしょうか。

python

1cost_history = [] 2for epoch in range(training_epochs): 3 sess.run(training_step, feed_dict={X:X_train, Y:y_train}) 4 cost_history.append(sess.run(cost, feed_dict={X:X_train, Y:y_train}) 5 if epoch % 100 == 0: 6 W_val = sess.run(W) 7 b_val = sess.run(b)

投稿2019/08/15 05:44

編集2019/08/15 07:47
tiitoi

総合スコア21956

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

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

hiro__12

2019/08/15 07:05

ありがとうございます! 正規化の箇所を入れたらできました。 もう一つ質問させていただけたら幸いなのですが、 # 誤差(cost)を確認 print(cost_history[0]) 上記の箇所で print(cost_history[50]) などにしたときに index 50 is out of bounds for axis 0 with size 2 このようなエラーが出てしまうのですがこちらはどのように対処すればよいでしょうか? ご教授いただけましたら幸いです。
tiitoi

2019/08/15 07:47

cost_history に追加していくところがおかしいです。 追記したようにしてみてはどうでしょうか
hiro__12

2019/08/15 08:30

分かりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問