用Mxnet对California房地产数据做线性回归分析
2017-03-18 00:00
471 查看
改写自去年写的一篇博客《用Mxnet和Tensorflow对California房地产数据做分析》。加了一些新的领悟。
Mxnet和Tensorflow都是我正在学习的东西,因为不熟,所以想多做些练习来加深理解。于是就用California房地产数据来练练手。
因为使用了多层神经网络训练,训练结果比原来使用一层的神经网络看起来要好些,MSE指标从0.54下降到0.34左右。所以,神经网络深一些,模型的效果确实会好一些。
Mxnet和Tensorflow都是我正在学习的东西,因为不熟,所以想多做些练习来加深理解。于是就用California房地产数据来练练手。
这里的California房地产数据引用自sklearn自带的数据集(2万多条数据)。该数据集比正规的版本做了简化,只有9个字段。 其中,特征属性有8个。 feature_names = ["MedInc", "HouseAge", "AveRooms","AveBedrms", "Population", "AveOccup", "Latitude","Longitude"]
该数据的目标值是该区域的平均房价。也就是说需要预测的是精确的平均房价,而不是分类标签。具体代码如下:
# coding=utf-8 from sklearn.datasets import fetch_california_housing from sklearn.preprocessing import StandardScaler import numpy as np import mxnet as mx from sklearn.utils import shuffle import logging housing = fetch_california_housing() m, n = housing.data.shape housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data] scaler = StandardScaler() scaled_housing_data = scaler.fit_transform(housing.data) scaled_housing_data_plus_bias = np.c_[np.ones((m, 1)), scaled_housing_data] n_epochs = 15 learning_rate = 0.025 #刚开始的时候,batch_size越大,程序速度就越快。经过一个阈值后,就没多大效果了。而且最终的MSE也没有太多改进。 batch_size =128 # shuffle data #X, y = shuffle(scaled_housing_data_plus_bias, housing.target) X, y = (scaled_housing_data_plus_bias, housing.target) # 定义符号 x_sym = mx.symbol.Variable('data') y_sym = mx.symbol.Variable('softmax_label') # 定义网络。这里可以根据需要定义多层网络,例如下面定义了3层网络,最后输出到线性回归处理器里 fc1 = mx.symbol.FullyConnected(data=x_sym, num_hidden=40, name='pre') act1 = mx.symbol.Activation(data = fc1, name='act1', act_type="relu") fc2 = mx.sym.FullyConnected(data=act1, name='fc2', num_hidden=20) act2 = mx.symbol.Activation(data = fc2, name='act2', act_type="relu") fc3 = mx.sym.FullyConnected(data=act2, name='fc3', num_hidden=1) # mxnet自带的线性回归 loss = mx.symbol.LinearRegressionOutput(data=fc3,label=y_sym, name='loss') # 定义模型 model = mx.model.FeedForward( ctx=mx.cpu(), symbol=loss, num_epoch=n_epochs, learning_rate=learning_rate, optimizer='adam' ) logging.basicConfig(level=logging.INFO) # Build iterator slice_index=20500 train_iter = mx.io.NDArrayIter(data=X[:18000], label=y[:18000], batch_size=batch_size, shuffle=True) eval_iter = mx.io.NDArrayIter(data=X[18000:slice_index], label=y[18000:slice_index], batch_size=batch_size, shuffle=True) test_iter=mx.io.NDArrayIter(data=X[slice_index:slice_index+1], shuffle=False) #训练时打印出mse和rmse指标 eval_metrics = ['mse'] eval_metrics.append('rmse') #训练 model.fit(X = train_iter, eval_metric=eval_metrics, eval_data=eval_iter) #预测测试例子 r=model.predict(test_iter) #打印预测结果和真实值,对比看看 print (r,y[slice_index:slice_index+1])
因为使用了多层神经网络训练,训练结果比原来使用一层的神经网络看起来要好些,MSE指标从0.54下降到0.34左右。所以,神经网络深一些,模型的效果确实会好一些。
相关文章推荐
- [MxNet]Lecture01-线性回归的gluon实现
- SPSS统计分析过程包括描述性统计、均值比较、一般线性模型、相关分析、回归分析、对数线性模型、聚类分析、数据简化、生存分析、时间序列分析、多重响应等几大类
- 数据分析---线性回归
- MXnet实战之线性回归
- SPSS统计分析过程包括描述性统计、均值比较、一般线性模型、相关分析、回归分析、对数线性模型、聚类分析、数据简化、生存分析、时间序列分析、多重响应等几大类
- 【python数据挖掘课程】十九.鸢尾花数据集可视化、线性回归、决策树花样分析
- [回归分析][11]--共线性数据的分析
- [MxNet]Lecture01-线性回归从零实现
- BlogEngine.Net架构与源代码分析系列part3:数据存储——基于Provider模式的实现
- 在Windows Mobile和Wince(Windows Embedded CE)下使用.NET Compact Framework进行GPS NMEA data数据分析的开发
- Asp.net MVC 示例项目"Suteki.Shop"分析之---数据验证
- BlogEngine.Net架构与源代码分析系列part3:数据存储——基于Provider模式的实现
- .NET Compact Framework下的GPS NMEA data数据分析
- spring.net 框架分析(六)数据访问
- 利用matlab中的函数进行线性回归分析
- ASP.NET页面传数据的各种方法和分析
- 多元线性回归分析
- ASP.NET抓取页面并分析页面数据的研究与探讨。
- ASP.NET页面间数据传递方法总结及分析
- 在ASP.NET下用Microsoft Excel进行数据分析与报表