O.r*_*rka 16 python machine-learning matrix scikit-learn tensorflow
我正在尝试按照本教程.
TensorFlow刚刚问世,我真的想要了解它.我熟悉像Lasso,Ridge和ElasticNet这样的惩罚线性回归及其在中的用法scikit-learn
.
对于scikit-learn
Lasso回归,我需要输入回归算法的是DF_X
[M×N维属性矩阵(pd.DataFrame)]和SR_y
[M维目标向量(pd.Series)].Variable
TensorFlow中的结构对我来说有点新鲜,我不知道如何将输入数据构建成它想要的东西.
似乎softmax回归用于分类. 如何重构我的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. ]
Run Code Online (Sandbox Code Playgroud)
And*_*huk 15
Softmax是唯一的加法函数(例如在逻辑回归中),它不是类似的模型
model = LassoCV()
model.fit(DF_X,SR_y)
Run Code Online (Sandbox Code Playgroud)
因此,您不能简单地使用fit方法为其提供数据.但是,您可以在TensorFlow函数的帮助下创建模型.
首先,您必须创建一个计算图,例如,对于线性回归,您将创建具有数据大小的张量.它们只是张量,你可以在程序的另一部分给它们你的数组.
import tensorflow as tf
x = tf.placeholder("float", [4, 3])
y_ = tf.placeholder("float",[4])
Run Code Online (Sandbox Code Playgroud)
当您创建两个变量时,它将包含我们模型的初始权重
W = tf.Variable(tf.zeros([3,1]))
b = tf.Variable(tf.zeros([1]))
Run Code Online (Sandbox Code Playgroud)
现在您可以创建模型(您想创建回归,而不是分类,因此您不需要使用tf.nn.softmax)
y=tf.matmul(x,W) + b
Run Code Online (Sandbox Code Playgroud)
由于您有回归和线性模型,您将使用
loss=tf.reduce_sum(tf.square(y_ - y))
Run Code Online (Sandbox Code Playgroud)
然后我们将按照与教程相同的步骤训练我们的模型
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
Run Code Online (Sandbox Code Playgroud)
现在您已经创建了计算图,您必须再编写一个程序部分,您将使用此图来处理数据.
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)})
Run Code Online (Sandbox Code Playgroud)
在这里,您可以在feed_dict的帮助下将数据提供给此计算图.在TensorFlow中,您可以在numpy数组中提供信息.如果你想看到你的错误,你可以写
sess.run(loss,feed_dict={x:np.asarray(DF_X),y_:np.asarray(SR_y)})
Run Code Online (Sandbox Code Playgroud)