2015-11-13 9 views
15

के लिए विशेषता और लक्ष्य मैट्रिस का उपयोग करें, मैं this tutorial का पालन करने का प्रयास कर रहा हूं।टेंसरफ्लो रैखिक रिग्रेशन पायथन

टेंसरफ्लो अभी बाहर आया और मैं वास्तव में इसे समझने की कोशिश कर रहा हूं। मैं दंडित रैखिक प्रतिगमन से लैसो, रिज, और लोचस्टिकनेट और scikit-learn में इसका उपयोग से परिचित हूं।

scikit-learn कमंद प्रतिगमन के लिए, सभी मैं प्रतिगमन एल्गोरिथ्म में इनपुट की जरूरत DF_X [एक एम एक्स एन आयामी विशेषता मैट्रिक्स (pd.DataFrame)] और SR_y है [एक एम आयामी लक्ष्य वेक्टर (pd.Series)]। Variable टेंसरफ्लो में संरचना मेरे लिए थोड़ा सा नया है और मुझे यकीन नहीं है कि मेरे इनपुट डेटा को अपनी इच्छानुसार कैसे व्यवस्थित किया जाए।

ऐसा लगता है जैसे सॉफ्टमैक्स प्रतिगमन वर्गीकरण के लिए है। रैखिक प्रतिगमन के लिए tensorflow में इनपुट करने के लिए मैं अपने DF_X (एम एक्स एन विशेषता मैट्रिक्स) और SR_y (एम आयामी लक्ष्य वेक्टर) को पुन: व्यवस्थित कैसे कर सकता हूं?

एक रेखीय प्रतिगमन करने के लिए मेरे वर्तमान विधि पांडा, 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

Softmax एक ही इसके अलावा समारोह (उदाहरण के लिए रसद प्रतिगमन में) है, यह की तरह

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

इसलिए एक मॉडल नहीं है आप बस इसे उपयुक्त विधि के साथ डेटा नहीं दे सकते हैं। हालांकि, आप बस टेंसरफ्लो फ़ंक्शंस की सहायता से अपना मॉडल बना सकते हैं।

सबसे पहले, आपको एक कम्प्यूटेशनल ग्राफ बनाना होगा, उदाहरण के लिए रैखिक प्रतिगमन के लिए आप अपने डेटा के आकार के साथ टेंसर बनाएंगे। वे केवल टेंसर हैं और आप उन्हें प्रोग्राम के दूसरे हिस्से में अपनी सरणी देंगे।

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])) 

की प्रारंभिक वजन में शामिल होंगे और अब आप (मॉडल बना सकते हैं आप प्रतिगमन बनाना चाहते हैं, नहीं वर्गीकरण इसलिए आप की जरूरत नहीं है 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) 

में के रूप में ही कदम के साथ हमारे मॉडल को प्रशिक्षित करेंगे अब जब कि तुम कार्यक्रम है, जहां आप इस ग्राफ का उपयोग करेगा का एक और हिस्सा लिखने के लिए कम्प्यूटेशनल ग्राफ आपके पास बनाए गए अपने डेटा के साथ काम करने के लिए।

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 की सहायता से इस कम्प्यूटेशनल ग्राफ को अपना डेटा देते हैं। टेंसरफ्लो में आप numpy arrays में जानकारी प्रदान करते हैं। आप अपनी गलती देखना चाहते हैं तो आप लिख सकते हैं

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

'लेखन त्रुटि: 'टेन्सर' वस्तु नहीं है iterable'I यह त्रुटि आई, जबकि' नुकसान = (राशि (y_-y)) ** 2' –

+0

मैं लगता है कि 'x' मैट्रिक्स और 'डब्ल्यू' वेक्टर ट्यूटोरियल के उदाहरण –

+2

में बदल दिए गए हैं मान लें कि आप स्क्वायर त्रुटियों की राशि चाहते हैं, मुझे लगता है कि 'हानि' को परिभाषित किया जाना चाहिए:' loss = tf.reduce_sum (tf.square (y_ - वाई)) '। ('पुनरावर्तनीय' त्रुटि टेंसरफ्लो ऑपरेटर की बजाय पाइथन के अंतर्निर्मित 'योग()' फ़ंक्शन का उपयोग करने से आती है; और मुझे लगता है कि आप स्क्वायरिंग के बाद योग लेना चाहते हैं।) – mrry

संबंधित मुद्दे