2015-11-13 21 views
15

私はthis tutorialに従おうとしています。TensorFlow線形回帰Pythonの属性とターゲット行列を使用

TensorFlowが出てきました。私は本当にそれを理解しようとしています。私はと罰せられた線形回帰(Lasso、Ridge、ElasticNetのように)とその使用法をscikit-learnによく知っています。 Iは、回帰アルゴリズムに入力する必要があるすべてがDF_Xあるscikit-learnラッソの回帰の

、[M次元のターゲットベクター(pd.Series)]とSR_y [MはN次元の属性マトリックス(pd.DataFrame)をX]。 TensorFlowのVariable構造は少し新しく、私は自分の入力データをどのようにして自分が望むものにするのかよく分かりません。

ソフトマックス回帰が分類用であるかのようです。 DF_X(M×N属性行列)とSR_y(M次元ターゲットベクトル)を線形回帰のためにtensorflowに入力するにはどうすればよいですか?

私の現在の線形回帰の方法は、pandas、numpy、およびsklearnを使用しています。これは以下のとおりです。私はこの質問をTensorFlowに慣れ人々のために本当に便利になると思う。

#!/usr/bin/python 
import pandas as pd 
import numpy as np 
import tensorflow as tf 
from sklearn.linear_model import LassoCV 

#Create DataFrames for attribute and target matrices 
DF_X = pd.DataFrame(np.array([[0,0,1],[2,3,1],[4,5,1],[3,4,1]]),columns=["att1","att2","att3"],index=["s1","s2","s3","s4"]) 
SR_y = pd.Series(np.array([3,2,5,8]),index=["s1","s2","s3","s4"],name="target") 

print DF_X 
#att1 att2 att3 
#s1  0  0  1 
#s2  2  3  1 
#s3  4  5  1 
#s4  3  4  1 

print SR_y 
#s1 3 
#s2 2 
#s3 5 
#s4 8 
#Name: target, dtype: int64 

#Create Linear Model (Lasso Regression) 
model = LassoCV() 
model.fit(DF_X,SR_y) 

print model 
#LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True, 
#max_iter=1000, n_alphas=100, n_jobs=1, normalize=False, positive=False, 
#precompute='auto', random_state=None, selection='cyclic', tol=0.0001, 
#verbose=False) 

print model.coef_ 
#[ 0.   0.3833346 0.  ] 

答えて

14

ソフトマックスは、(例えばロジスティック回帰で)のみ加算機能で、それがため

model = LassoCV() 
model.fit(DF_X,SR_y) 

のようなモデルではありませんあなたは単にそれをフィット方法でデータに与えることはできません。ただし、TensorFlow関数の助けを借りてモデルを作成するだけで済みます。

まず、計算グラフを作成する必要があります。たとえば、線形回帰の場合、データのサイズでテンソルを作成します。それらはテンソルだけであり、プログラムの別の部分に配列を渡します。

import tensorflow as tf 
x = tf.placeholder("float", [4, 3])  
y_ = tf.placeholder("float",[4]) 

あなたは我々のモデル

W = tf.Variable(tf.zeros([3,1])) 
b = tf.Variable(tf.zeros([1])) 

の初期重みを含んでいますそして今、あなたはので、あなたが必要としないモデル(あなたが回帰を作成したい、ない分類を作成することができる2つの変数を作成あなたは回帰と線形モデルを持っているとして、あなたは

を使用します

y=tf.matmul(x,W) + b 

)tf.nn.softmax使用します

loss=tf.reduce_sum(tf.square(y_ - y)) 

その後、我々は今、あなたはあなたがこのグラフを使用します。あなたがプログラムの1つの以上の部分を記述する必要があり、計算、グラフを作成したチュートリアル

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss) 

と同じステップで我々のモデルを訓練しますあなたのデータを扱う

init = tf.initialize_all_variables() 
sess = tf.Session() 
sess.run(init)  
sess.run(train_step, feed_dict={x:np.asarray(DF_X),y_:np.asarray(SR_y)}) 

この計算グラフには、feed_dictを使用してデータを与えます。 TensorFlowでは、数値の配列で情報を提供します。あなたが間違いを見たい場合は あなたは

sess.run(loss,feed_dict={x:np.asarray(DF_X),y_:np.asarray(SR_y)}) 
+0

'TypeError例外を書くことができます: 'テンソル' オブジェクトがないiterable'Iはこのエラーを得ながら、'損失=(SUM(Y_-Y))** 2 ' –

+0

Iチュートリアルの例で 'x'行列と' W'ベクトルが入れ替えられたと思ってください –

+2

エラーの平方和を計算すると仮定すると、 'loss'は以下のように定義されるべきです:' loss = tf.reduce_sum(tf.square(y_ - y)) 'とする。 ( 'not iterable'というエラーは、TensorFlow演算子ではなく、Pythonの組み込みの' sum() '関数を使うことから来ています;そして、二乗の後に合計を取りたいと思っています) – mrry