Machine learning 我能';我的tensorflow梯度下降线性回归算法无法工作

Machine learning 我能';我的tensorflow梯度下降线性回归算法无法工作,machine-learning,tensorflow,Machine Learning,Tensorflow,我正试图编写一个简单的tensorflow线性回归模型,该模型采用波士顿住房数据的子集,特别是房间数(RM) 列作为自变量,中值价格(MEDV)作为因变量,并对其应用梯度下降算法 但是,当我运行它时,优化器似乎不起作用。成本从未降低,重量实际上在错误的方向上增加 以下是我构建的各种情节 x和y的散点图 主成分分析图 原始数据拟合 测试数据拟合 图片如下: 我的程序的输出如下所示: 时代:0050成本=6393135366144.000000000 W=110392.0 b=456112.0 时

我正试图编写一个简单的tensorflow线性回归模型,该模型采用波士顿住房数据的子集,特别是房间数(RM) 列作为自变量,中值价格(MEDV)作为因变量,并对其应用梯度下降算法

但是,当我运行它时,优化器似乎不起作用。成本从未降低,重量实际上在错误的方向上增加

以下是我构建的各种情节

  • x和y的散点图

  • 主成分分析图

  • 原始数据拟合

  • 测试数据拟合

  • 图片如下:

    我的程序的输出如下所示:

    时代:0050成本=6393135366144.000000000 W=110392.0 b=456112.0

    时代:0100成本=6418308005888.000000000 W=111131.0 b=459181.0

    时代:0150成本=6418496225280.000000000 W=111136.0 b=459203.0

    时代:0200成本=6418497798144.000000000 W=111136.0 b=459203.0

    时代:1000成本=6418497798144.000000000 W=111136.0 b=459203.0

    请注意,成本永远不会降低,事实上,重量在应该降低时会略微增加

    我不知道为什么会这样。据我所知,这些数据似乎是合理的,我不知道为什么优化器不能工作。 代码本身只是一个标准的tensorflow线性回归示例,我从互联网上下载了它,并为我的数据集进行了修改

    将熊猫作为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()
    `
    
    我在一个真正的地方