将属性和目标矩阵用于 TensorFlow 线性回归 Python

Use attribute and target matrices for TensorFlow Linear Regression Python

我正在尝试关注 this tutorial

TensorFlow 刚出来,我真的很想了解它。我熟悉 惩罚线性回归 ,如 Lasso、Ridge 和 ElasticNet 及其在 scikit-learn 中的用法。

对于scikit-learn套索回归,我需要输入到回归算法中的是DF_X[一个M x N维属性矩阵(pd.DataFrame)]和SR_y [一个M维目标向量(pd.Series)]。 TensorFlow 中的 Variable 结构对我来说有点新,我不确定如何将我的输入数据构造成它想要的结构。

好像softmax回归是为了分类。 如何重组我的 DF_X(M x 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.       ]

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

当您创建两个变量时,它们将包含我们模型的初始权重

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 将数据提供给此计算图。在 TensorFlow 中,您以 numpy 数组的形式提供信息。 如果你想看到你的错误,你可以写

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