Via*_*kyi 4 linear-regression tensorflow tflearn
我正在为来自csv的数据构建一个简单的线性回归量.数据包括一些人的体重和身高.整体学习过程非常简单:
MAX_STEPS = 2000
# ...
features = [tf.contrib.layers.real_valued_column(feature_name) for feature_name in FEATURES_COL]
# ...
linear_regressor = tf.contrib.learn.LinearRegressor(feature_columns=features)
linear_regressor.fit(input_fn=prepare_input, max_steps=MAX_STEPS)
Run Code Online (Sandbox Code Playgroud)
然而,由回归量构建的模型出乎意料地是坏的.结果可以用下一张图片说明:

可视化代码(以防万一):
plt.plot(height_and_weight_df_filtered[WEIGHT_COL],
linear_regressor.predict(input_fn=prepare_full_input),
color='blue',
linewidth=3)
Run Code Online (Sandbox Code Playgroud)
以下是scikit-learn为LinearRegression类提供的相同数据:
lr_updated = linear_model.LinearRegression()
lr_updated.fit(weight_filtered_reshaped, height_filtered)
Run Code Online (Sandbox Code Playgroud)
增加步骤量无效.我会假设我以错误的方式使用TensorFlow中的回归量.
看起来你的TF模型确实有效,并且会有足够的步骤.你需要把它顶起来 - 200K显示出显着的改进,几乎和sklearn默认一样好.
我认为有两个问题:
FtrlOptimizer.该文件表明它是非常大的数据集的更好选择.input_fn该模型中注入整个训练组一次,每一步.这只是一种预感,但我怀疑如果它一次看到批次,FtrlOptimizer可能会做得更好.您可以将优化器上的学习速率提升(默认值为0.2),而不仅仅是将步数增加几个数量级,而且只需4k步就能获得同样好的结果:
linear_regressor = tf.contrib.learn.LinearRegressor(
feature_columns=features,
optimizer=tf.train.FtrlOptimizer(learning_rate=5.0))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
413 次 |
| 最近记录: |