TensorFlowのLinear/DNnRegrressorでデータを予測する
7421 ワード
今日処理する問題は、線形回帰のみを学んだ機械学習初心者にとっては難しい--既知のいくつかのデータのセットを通じてデータのセットを予測する.EXcelで見てみると、関係は明らかではなく、平方、logは明らかではなく、試しても仕方がないので、立ち止まって考えを整理しました.
構想を整理する.
研削時間 tensorflow回帰に関するドキュメントチュートリアル udacityのTitanic例 たきぎ切り時間 python excelテーブルのデータ を読み込む一次元入力予測出力 を試みる. 5 5次元入力予測出力 を試みる.
研削開始
TensorFlowチュートリアルを読む
tensor、vector、matrixについて...
上のコードはtensor,vector,matrix,そして様々な場合の[]がどういう意味を表しているのか,つまり私がこれまでやってきた次元をはっきり説明しています.いずれも[]であるが、重要なのはvectorかmatrixか他の3次元4次元の空間記述かであり、光の1つの[]はtensor、[]はrank=1のtensor、[[[[]]はrank=2のtensor、[[[[]]はrank=3のtensorとしか呼ばれない.
研削ナイフで得られた代替案 tf.contrib.learn 一昨日習ったばかりの線形回帰時間は十分で、さもなくば最初の1つだけ試してみるといいです.
薪を切り始める
jupyter notebookで書いたのですが、メリットはセグメント化して実行し、小さなステップで小さなステップテストを書くことです.
python excelテーブルの読み込み
この部分は問題の主線ではなく、葛藤しないで、勝手に方法を選んで読めばいいです.先日udacityの最初のプロジェクトをして、csvファイルのデータを読み取るのに使いました.私が取った案はexcelをcsvファイルに変えて、それから読み取ることです. xlsxはcsv として保存されます.は読み取りをテストし、まず最初の行 を読み取る.
3つの注意点:1、head()関数はデフォルトで最初の5行を返します.2、他の言叶に惯れて、いつも戻り値に関心を持って、pythonがおかしいと感じて、どんなタイプなのか见えないで、パラメータを书く时いつも各种の问题に出会って、仕方なく绝えずタイプを印刷します......予測する列を出力としてデータテーブルから を削除する.
ここでtrain_を印刷data_inputでは出力列がなく,同じ方法で入力データの次元を自由に制御できることが分かった.train_data_outcomesのタイプは
トレーニング予測と評価
tfを使用する.contrib.learn.LinearRegressorは1次元入力予測出力を試みます
一次元入力とは、x=[1,2,3,4,5,…]であり、DataFrameのいずれかの列のみをとり、この列で出力を予測する
最終出力{'loss':xxxx,'global_step':xxxx}
tfを使用する.contrib.learn.LinearRegressorは5次元入力予測出力を試みた
5次元に変える最大の問題はinputですfnの1番目のパラメータと2番目のパラメータ(すなわち入力xと出力y)はいったいどんなタイプなのか、上のコードをcopyしてfeature_columnsのdimensionを5に変えてinput_fnのtrain_data_InputをDataFrameに変更すると、次のエラーが発生します.
AttributeError: 'DataFrame' object has no attribute 'dtype'
train_のためdata_outcomesはさっきSeriousを見たのですが、[1,2,3,4......]というように成長しているので、DataFrameを[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],...]というように変えたいと思い、私は比較的不器用な方法を使いました.
印刷すると欲しい形になってinput_fnの最初のパラメータには、{「x」:k}(名前が悪い、勝手に起きた、意図を明らかにしていない)がありますが、次のエラーが表示されます.
AttributeError: 'list' object has no attribute 'shape'
そこでまた変更して、kの外にnpをセットします.array(k)、やっと運転できるようになりました
tfを使用する.contrib.learn.DNnRegressorは5次元入力予測出力を試みる
このclassifier.evaluateのパラメータは上記の2つの方法とは異なります.これはinput_がないからです.fn、apiを見ても、タイプが分からないが、私は中の方法を理解して、xとyを定義しなければ、input_が必要だ.fn、定義したらinput_を使わなくてもいいですfnなので、xとyを使ってみましたが、やっぱりいいですね.
等価コード
この2つの5次元の発見の同理を書き終わって、LinearRegressionのその5次元のもinputを持たないで書くことができますfnの、fitをxとyに変更し、feature_を指定しないcolumnsのキー値xでいいです.そうしないと、Key Errorと報告されます.これにより、入出力を処理する必要はありませんが、batch_が少なくなります.変更後の同理コードは以下の通りです.
問題
APIの不慣れさとPythonの不慣れさのため、上記のものはまる2日間やって、また次の2つの疑問を残して、今後の学習の中で次第に補充することができて、しかしもしできる同級生が3つの言葉で1つ2つのことを指摘することができたら感謝に堪えません.精度はどのように私がlossの値に関心を持っていないことを評価して、私はそれが1つの正解率を出力することができることを望んで、点数あるいは小数はすべてできますが、私は最も愚かな方法で、出力と真実の出力をプログラムで1回比べて、しかし私はevaluateが直接出力する仕事の能力があることを発見したようで、しかし使うことができなくて、できる学友の指導の下で望みます. 予測方法 予測方法を見つけた
この方法は1つ得て、私はその値がどれらがあるかを見て、それをlistに変えなければなりません.こんなに面倒ですか?generateタイプにはどのようなメリットがありますか?なぜこのタイプのオブジェクトを返すのですか?
構想を整理する.
研削時間
研削開始
TensorFlowチュートリアルを読む
tensor、vector、matrixについて...
3 # a rank 0 tensor; this is a scalar with shape []
[1, 2, 3] # a rank 1 tensor; this is a vector with shape[3]
[[1, 2, 3], [4, 5, 6]] # a rank 2 tensor; this is a matrix with shape [2, 3]
[[[1, 2, 3]], [[ 7, 8, 9]]] # a rank 3 tensor with shape[2, 1, 3]
上のコードはtensor,vector,matrix,そして様々な場合の[]がどういう意味を表しているのか,つまり私がこれまでやってきた次元をはっきり説明しています.いずれも[]であるが、重要なのはvectorかmatrixか他の3次元4次元の空間記述かであり、光の1つの[]はtensor、[]はrank=1のtensor、[[[[]]はrank=2のtensor、[[[[]]はrank=3のtensorとしか呼ばれない.
研削ナイフで得られた代替案
tf.contrib.learn
はTensorFlowの高度なAPIであり、多くの一般的なモデルを定義し、符号化を簡略化することができる.tf.contrib.learn.LinearRegressor
この関数は線形回帰を実現し、同じように他の回帰を実現することができ、APIを見て、logistic regression、linear classification、logistic classification、and many neural network classifieds and regressionsを実現することができることを発見した.これは問題の解決に良い方案を提供して、後で続々と試みることができます.薪を切り始める
jupyter notebookで書いたのですが、メリットはセグメント化して実行し、小さなステップで小さなステップテストを書くことです.
python excelテーブルの読み込み
この部分は問題の主線ではなく、葛藤しないで、勝手に方法を選んで読めばいいです.先日udacityの最初のプロジェクトをして、csvファイルのデータを読み取るのに使いました.私が取った案はexcelをcsvファイルに変えて、それから読み取ることです.
import tensorflow as tf
import numpy as np
import pandas as pd
train_data_file = '/Users/liukaixin/ProductDocuments/ShaleGasPressure/train_data.csv'
predict_data_file = '/Users/liukaixin/ProductDocuments/ShaleGasPressure/predict_data.csv'
full_train_data = pd.read_csv(train_data_file)
full_predict_data = pd.read_csv(predict_data_file)
#
print(full_train_data.head())
#
print(full_predict_data.head())
# shape
print(full_train_data.shape)
# shape
print(full_predict_data.shape)
# pd.read_csv
print(type(full_train_data))
3つの注意点:1、head()関数はデフォルトで最初の5行を返します.2、他の言叶に惯れて、いつも戻り値に関心を持って、pythonがおかしいと感じて、どんなタイプなのか见えないで、パラメータを书く时いつも各种の问题に出会って、仕方なく绝えずタイプを印刷します......
pd.read_csv
取り戻したのはDataFrameです.3、このDataFrameのshapeは(500,6)、1次元に500個のデータがあり、2次元に6個のデータがあり、6行500列と考えることができますが、行列になりたくないほうがいいと思います.tensorの書き方に変えればいいと思います.データが多次元になると頭が悪くなることがあります.例えば、これ(500,6)をtensorに変えると[[1,2,3,4,5,6],[1,2,4,4,4,5,6],[1,2,3,4,4,5,6],....[1,2,3,4,5,6]]もっと多次元のものにぶつかったらtensorで描けばいい.#
train_data_outcomes = train_data['your outcome key']
# DataFrame
train_data_input = train_data.drop('your outcome key', axis = 1)
print(train_data_input)
print(type(train_data_outcomes))
ここでtrain_を印刷data_inputでは出力列がなく,同じ方法で入力データの次元を自由に制御できることが分かった.train_data_outcomesのタイプは
トレーニング予測と評価
tfを使用する.contrib.learn.LinearRegressorは1次元入力予測出力を試みます
一次元入力とは、x=[1,2,3,4,5,…]であり、DataFrameのいずれかの列のみをとり、この列で出力を予測する
# ,
feature_columns = [tf.contrib.layers.real_valued_column("x", dimension=1)]
# LinearRegressor
estimator = tf.contrib.learn.LinearRegressor(feature_columns=feature_columns)
input_fn = tf.contrib.learn.io.numpy_input_fn({"x": train_data_input}, train_data_outcomes, batch_size=4,
num_epochs=1000)
# .
estimator.fit(input_fn=input_fn, steps=1000)
print(estimator.evaluate(input_fn=input_fn))
最終出力{'loss':xxxx,'global_step':xxxx}
tfを使用する.contrib.learn.LinearRegressorは5次元入力予測出力を試みた
5次元に変える最大の問題はinputですfnの1番目のパラメータと2番目のパラメータ(すなわち入力xと出力y)はいったいどんなタイプなのか、上のコードをcopyしてfeature_columnsのdimensionを5に変えてinput_fnのtrain_data_InputをDataFrameに変更すると、次のエラーが発生します.
AttributeError: 'DataFrame' object has no attribute 'dtype'
train_のためdata_outcomesはさっきSeriousを見たのですが、[1,2,3,4......]というように成長しているので、DataFrameを[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],...]というように変えたいと思い、私は比較的不器用な方法を使いました.
k = []
for i in range(500):
tmpx = []
tmpx.append(train_data_input['your first dimension name'][i])
tmpx.append(train_data_input['your second dimension name'][i])
tmpx.append(train_data_input['your third dimension name'][i])
tmpx.append(train_data_input['your fourth dimension name'][i])
tmpx.append(train_data_input['your fifth dimension name'][i])
k.append(tmpx)
print(array_train_data_x)
印刷すると欲しい形になってinput_fnの最初のパラメータには、{「x」:k}(名前が悪い、勝手に起きた、意図を明らかにしていない)がありますが、次のエラーが表示されます.
AttributeError: 'list' object has no attribute 'shape'
そこでまた変更して、kの外にnpをセットします.array(k)、やっと運転できるようになりました
feature_columns = [tf.contrib.layers.real_valued_column("x", dimension=5)]
estimator = tf.contrib.learn.LinearRegressor(feature_columns=feature_columns)
input_fn = tf.contrib.learn.io.numpy_input_fn({"x": np.array(k)}, np.array(f), batch_size=4,
num_epochs=1000)
estimator.fit(input_fn=input_fn, steps=1000)
print(estimator.evaluate(input_fn=input_fn))
tfを使用する.contrib.learn.DNnRegressorは5次元入力予測出力を試みる
feature_columns = [tf.contrib.layers.real_valued_column("", dimension=5)]
classifier = tf.contrib.learn.DNNRegressor(feature_columns=feature_columns,
hidden_units=[10],
optimizer=tf.train.RMSPropOptimizer(learning_rate=.001),
activation_fn=tf.nn.relu)
classifier.fit(x= train_data_input,
y=train_data_outcomes,
max_steps=1000)
print(classifier.evaluate(x= train_data_input, y=train_data_outcomes))
このclassifier.evaluateのパラメータは上記の2つの方法とは異なります.これはinput_がないからです.fn、apiを見ても、タイプが分からないが、私は中の方法を理解して、xとyを定義しなければ、input_が必要だ.fn、定義したらinput_を使わなくてもいいですfnなので、xとyを使ってみましたが、やっぱりいいですね.
等価コード
この2つの5次元の発見の同理を書き終わって、LinearRegressionのその5次元のもinputを持たないで書くことができますfnの、fitをxとyに変更し、feature_を指定しないcolumnsのキー値xでいいです.そうしないと、Key Errorと報告されます.これにより、入出力を処理する必要はありませんが、batch_が少なくなります.変更後の同理コードは以下の通りです.
feature_columns = [tf.contrib.layers.real_valued_column("", dimension=5)]
estimator = tf.contrib.learn.LinearRegressor(feature_columns=feature_columns)
# input_fn = tf.contrib.learn.io.numpy_input_fn({"x": np.array(k)}, train_data_outcomes, batch_size=4,
# num_epochs=3000)
# estimator.fit(input_fn=input_fn, steps=3000)
estimator.fit(x= train_data_input,y=train_data_outcomes, batch_size=4,steps=3000)
print(estimator.evaluate(x= train_data_input,y=train_data_outcomes))
問題
APIの不慣れさとPythonの不慣れさのため、上記のものはまる2日間やって、また次の2つの疑問を残して、今後の学習の中で次第に補充することができて、しかしもしできる同級生が3つの言葉で1つ2つのことを指摘することができたら感謝に堪えません.
print(estimator.predict(x= train_data_input))
print(type(estimator.predict(x= train_data_input)))
この方法は1つ得て、私はその値がどれらがあるかを見て、それをlistに変えなければなりません.こんなに面倒ですか?generateタイプにはどのようなメリットがありますか?なぜこのタイプのオブジェクトを返すのですか?