Machine learning 我能';我的tensorflow梯度下降线性回归算法无法工作
我正试图编写一个简单的tensorflow线性回归模型,该模型采用波士顿住房数据的子集,特别是房间数(RM) 列作为自变量,中值价格(MEDV)作为因变量,并对其应用梯度下降算法 但是,当我运行它时,优化器似乎不起作用。成本从未降低,重量实际上在错误的方向上增加 以下是我构建的各种情节Machine learning 我能';我的tensorflow梯度下降线性回归算法无法工作,machine-learning,tensorflow,Machine Learning,Tensorflow,我正试图编写一个简单的tensorflow线性回归模型,该模型采用波士顿住房数据的子集,特别是房间数(RM) 列作为自变量,中值价格(MEDV)作为因变量,并对其应用梯度下降算法 但是,当我运行它时,优化器似乎不起作用。成本从未降低,重量实际上在错误的方向上增加 以下是我构建的各种情节 x和y的散点图 主成分分析图 原始数据拟合 测试数据拟合 图片如下: 我的程序的输出如下所示: 时代:0050成本=6393135366144.000000000 W=110392.0 b=456112.0 时
将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
从matplotlib.mlab导入PCA
从mpl_toolkits.mplot3d导入Axes3D
将numpy作为np导入
导入tensorflow作为tf
导入系统
从sklearn导入模型_选择
从sk学习导入预处理
np.设置打印选项(精度=3,抑制=True)
def pca(数据集):
plt.scatter(数据集[:,0],数据集[:,1])
plt.plot()
plt.show()
结果=主成分分析(数据集)
x=[]
y=[]
对于results.Y中的项目:
x、 追加(项目[0])
y、 追加(第[1]项)
plt.close(“全部”)
图1=plt.图()
pltData=[x,y]
plt.散射(pltData[0],pltData[1],c='b')
xAxisLine=((最小值(pltData[0]),最大值(pltData[0]),(0,0),(0,0))
yAxisLine=((最小值(pltData[1]),最大值(pltData[1]),(0,0),(0,0))
plt.xlabel('RM')
plt.ylabel('MEDV')
plt.show()
rng=np.random
#学习率是我们传递给梯度下降算法的alpha值。
学习率=0.1
#我们将运行多少个循环以尝试获得最佳拟合。
培训时间=1000
显示步进=50
#我们将从csv文件中提取一个值,并提取X值(RM)和Y值(MEDV)
boston\u dataset=pd.read\u csv('data/housing.csv'))
label=boston_数据集['MEDV']
features=boston_数据集['RM']。重塑(-1,1)
dataset=np.asarray(波士顿大学数据集['RM'])
dataset=np.column_stack((np.asarray(boston_dataset['RM']),np.asarray(boston_dataset['MEDV']))
pca(数据集)
列车X、测试X、列车Y、测试Y=型号选择。列车测试分割(特征、标签、测试尺寸=0.33,
随机状态=5)
scaler=预处理。StandardScaler()
train\u X=定标器.拟合变换(train\u X)
#这是我们将要运行的数据样本总数。
n_样本=序列X.形状[0]
#变量占位符。
X=tf.占位符('float')
Y=tf.占位符('float')
W=tf.Variable(rng.randn(),name='weight')
b=tf.Variable(rng.randn(),name='bias')
#这里我们描述我们的培训模式。这是一个使用标准y=mx+b的线性回归模型
#点斜率公式。我们使用最小均方来计算成本。
#这是我们的预测算法:y=mx+b
预测=tf.add(tf.multiply(X,W),b)
#现在让我们使用最小均方来计算预测算法的成本
训练成本=tf.reduce\u和(tf.pow(prediction-Y,2))/(2*n个样本)
#这是我们的梯度下降优化算法。我们通过了阿尔法,我们的学习率
#我们想要的是培训成本的最小值。
优化器=tf.train.GradientDescentOptimizer(学习率)。最小化(培训成本)
init=tf.global_variables_initializer()
#现在,我们将通过模型运行训练数据。
使用tf.Session()作为tf_会话:
#初始化所有的tensorflow变量。
tf_session.run(init)
#我们将对数据运行1000次(即training_历次的值)。
对于范围内的历元(训练历元):
#对于每个训练周期,将x和y值传递给优化器算法以计算成本。
对于拉链中的(x,y)(x列,y列):
运行(优化器,feed_dict={X:X,Y:Y})
#每50个周期,让我们检查一次,看看情况如何。
如果(历元+1)%50==0:
c=tf_session.run(培训成本,feed_dict={X:train_X,Y:train_Y})
打印('Epoch:','%04d'%
(epoch+1),'cost=','{.9f}'。格式(c)\
“W=”,tf_session.run(W),“b=”,tf_session.run(b))
打印('优化完成')
打印('Training cost=',Training_cost',W=',tf_session.run(W),'b=',tf_session.run(b),'\n')
plt.绘图(X列、Y列、ro列、标签=原始数据)
plt.绘图(列车X、TFU会话运行(W)*列车X+tf会话运行(b),标签=‘装配线’)
plt.legend()
plt.show()
#我们现在将运行测试数据,以查看经过训练的模型的工作情况。
打印(‘测试…(均方损失比较)’)
testing_cost=tf_session.run(tf.reduce_sum(tf.pow(prediction-Y,2))/(2*test_Y.shape[0]),feed_dict={X:test_X,Y:test_Y})
打印('测试成本=',测试成本)
打印(“绝对均方损失差:”,abs(培训成本-测试成本))
plt.绘图(测试X,测试Y,'bo',标签='测试数据')
plt.plt(测试X,tf_session.run(W)*测试X+tf_session.run(b),标签=‘装配线’)
plt.legend()
plt.show()
`
我在一个真正的地方