17

このチュートリアルに従おうとしています。

TensorFlow が出てきたばかりで、私は本当にそれを理解しようとしています。Lasso、Ridge、ElasticNet などのペナルティ付き線形回帰と、.NET でのその使用法に精通していますscikit-learn

Lasso 回帰の場合scikit-learn、回帰アルゴリズムに入力する必要があるのは、DF_X[M x N 次元の属性マトリックス (pd.DataFrame)] とSR_y[M 次元のターゲット ベクトル (pd.Series)] だけです。TensorFlowのVariable構造は私にとって少し新しいものであり、入力データを必要なものに構造化する方法がわかりません。

ソフトマックス回帰は分類用のようです。 (M x N 属性マトリックス) と(M 次元ターゲット ベクトル) を再構築して線形回帰に入力するにはどうすればよいですか?DF_XSR_ytensorflow

線形回帰を実行するための現在の方法では、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.       ]
4

1 に答える 1

16

Softmax は唯一の加算関数 (ロジスティック回帰など) であり、次のようなモデルではありません。

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

したがって、単純に fit メソッドでデータを与えることはできません。ただし、TensorFlow 関数を使用してモデルを簡単に作成できます。

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

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

2 つの変数を作成すると、モデルの初期重みが含まれます

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

これで、モデルを作成できます (分類ではなく回帰を作成するため、 tf.nn.softmax を使用する必要はありません)。

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

回帰と線形モデルがあるので、使用します

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

次に、チュートリアルと同じ手順でモデルをトレーニングします

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

計算グラフを作成したので、プログラムのもう 1 つの部分を作成する必要があります。ここでは、このグラフを使用してデータを処理します。

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 では、numpy 配列で情報を提供します。あなたの間違いを見たいなら、あなたは書くことができます

sess.run(loss,feed_dict={x:np.asarray(DF_X),y_:np.asarray(SR_y)}) 
于 2015-11-14T20:24:28.933 に答える