使用sklearn进行数据挖掘系列文章:

在前几节,我们先对数据进行了解,然后又详细介绍了数据集划分的方法,为了帮助我们更好的了解数据,又绘制了数据的分布图,之后对数据进行了预处理(数值类型和标签类型特征的处理)。上面这些步骤都是一些基础工作,本节将介绍选择和构建机器学习模型。

在测试集上面训练模型###

经验告诉我们,在使用机器学习算法的时候,一开始先选用简单的模型,撸一个baseline是一个很好的习惯。所以我们先尝试使用线性回归模型,先使用几个样本尝试以下该分类器:

from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(housing_prepared,housing_labels)
some_data = housing.iloc[:5]
some_labels = housing_labels.iloc[:5]
some_data_preared = full_pipeline.transform(some_data)
print 'prediction:',lin_reg.predict(some_data_preared)
print 'labels:',some_labels.values
>>
prediction: [ 210644.60459286 317768.80697211 210956.43331178 59218.9888684 189747.55849879]
labels: [ 286600. 340600. 196900. 46300. 254500.]

不错,看来我们之前的一些预处理工作和分类器都能正常运行。那么我们该如何衡量我们的算法的好坏呢?

,sklearn提供了root mean squared error,RMSE作为评价指标:

from sklearn.metrics import mean_squared_error #

housing_predictions = lin_reg.predict(housing_prepared)
lin_mse = mean_squared_error(housing_labels,housing_predictions)
lin_rmse = np.sqrt(lin_mse) #平方根
print lin_rmse
>>
68628.1981985

从第一节housing.describe()中我们知道median_housing_values的范围为14W-50W ,着也意味着分类器欠拟合训练数据,我们需要做的是找一个能力更加强大的分类器或者减少对模型的约束。尝试以下非线性回归模型DecisionTreeRegressor,回归决策树能够找出复杂的非线性关系,下面是代码

from sklearn.tree import DecisionTreeRegressor
tree_reg = DecisionTreeRegressor()
tree_reg.fit(housing_prepared,housing_labels) housing_predictions = tree_reg.predict(housing_prepared)
tree_mse = mean_squared_error(housing_labels,housing_predictions)
tree_rmse = np.sqrt(tree_mse)
>>print tree_rmse
0.0

误差竟然为0,实际上可能发生了严重的过拟合。那么问题来了,我们该如何分析结果到底是欠拟合还是过拟合呢?下面就引入了交叉验证

交叉验证###

由于目前我们的测试集是不能动的,因为还没到确定最终的模型。我们可以把训练集再划分为训练集和测试集两部分。我们可以使用前面提到的train_test_split方法,不过强大的sklearn还提供了K-fold交叉验证方法:

from sklearn.model_selection import cross_val_score
scores = cross_val_score(tree_reg,housing_prepared,\
housing_labels,scoring='neg_mean_squared_error',cv=10)
rmse_scores = np.sqrt(-scores)

上面这段代码将训练集随机的分为10份,在9份上面训练,在剩下的一份上面测试。

>>rmse_scores
array([ 69080.4167045 , 67652.35297369, 70592.30099278, 67905.0445584 ,
71256.61551091, 74264.47020443, 70141.37468916, 71525.02444872,
76283.57397045, 69691.77150094])
>>rmse_scores.mean()
70839.294555398083
>>rmse_scores.std()
2564.0079357717691

note:sklearn提供的交叉验证方法希望得到一个较大的值(越大越好),这个和损失函数正好相反(越小越好),所以使用的是-score

看到了上面的结果,发现决策是的效果其实很一般,甚至还没有线性回归的结果好(增加了3K)。

现在看以下线性回归的交叉验证值

lin_scores = cross_val_score(lin_reg,housing_prepared,\
housing_labels,scoring='neg_mean_squared_error',cv=10)
lin_rmse_scores = np.sqrt(-lin_scores)
>>lin_rmse_scores
array([ 66782.73843989, 66960.118071 , 70347.95244419, 74739.57052552,
68031.13388938, 71193.84183426, 64969.63056405, 68281.61137997,
71552.91566558, 67665.10082067])
>>lin_rmse_scores.mean()
69052.461363450828
>>lin_rmse_scores.std()
2731.6740017983493

使用随机森林(RandomForestRegression)

from sklearn.ensemble import RandomForestRegressor
forest_reg = RandomForestRegressor()
forest_reg.fit(housing_prepared, housing_labels)
housing_predictions = forest_reg.predict(housing_prepared)
forest_mse = mean_squared_error(housing_labels, housing_predictions)
forest_rmse = np.sqrt(forest_mse)
print forest_rmse #22180.0543101
forest_scores = cross_val_score(forest_reg, housing_prepared, housing_labels,
scoring="neg_mean_squared_error", cv=10)
forest_rmse_scores = np.sqrt(-forest_scores)
>>forest_rmse_scores
array([ 52036.18016789, 51138.17643755, 54179.12437821, 53870.89837397,
52413.73419948, 55299.52908533, 51322.32440328, 50743.46362248,
55491.68139413, 52746.07818231])
>>forest_rmse_scores.mean() #结果大于22180。说明训练集存在过拟合
52924.119024463616
>>forest_rmse_scores.std()
1621.653495429834

上面列举了使用线性回归、决策树回归和随机森林回归的方法。可以看的出随机森林的效果最好,如果你想还可以继续尝试其他的算法比如SVR、神经网络等,找出效果较好的模型。

使用sklearn进行数据挖掘-房价预测(5)—训练模型的更多相关文章

  1. 使用sklearn进行数据挖掘-房价预测(4)—数据预处理

    在使用机器算法之前,我们先把数据做下预处理,先把特征和标签拆分出来 housing = strat_train_set.drop("median_house_value",axis ...

  2. 使用sklearn进行数据挖掘-房价预测(6)—模型调优

    通过上一节的探索,我们会得到几个相对比较满意的模型,本节我们就对模型进行调优 网格搜索 列举出参数组合,直到找到比较满意的参数组合,这是一种调优方法,当然如果手动选择并一一进行实验这是一个十分繁琐的工 ...

  3. 使用sklearn进行数据挖掘-房价预测(1)

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  4. 使用sklearn进行数据挖掘-房价预测(2)—划分测试集

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  5. 使用sklearn进行数据挖掘-房价预测(3)—绘制数据的分布

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  6. 基于sklearn的波士顿房价预测_线性回归学习笔记

    > 以下内容是我在学习https://blog.csdn.net/mingxiaod/article/details/85938251 教程时遇到不懂的问题自己查询并理解的笔记,由于sklear ...

  7. 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示

    第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...

  8. 转载:使用sklearn进行数据挖掘

    目录 1 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键技术2 并行处理 2.1 整体并行处理 2.2 部分并行处理3 流水线处理4 自动化调参5 持久化6 回 ...

  9. 使用sklearn进行数据挖掘

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

随机推荐

  1. Loadrunner Webservice接口性能测试脚本编写优化总结

    本文主要介绍使用Loadrunner Webservice接口性能测试脚本编写及优化总结. 1.Webservice协议脚本编写流程 下面介绍使用Loadrunner 11调用Webservice接口 ...

  2. (转)Nginx与tomcat组合的简单使用

    原文出自:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中瓦片资源越来越多,如果提高瓦片的访问效率是一个需要解决的问题.这里,我们考虑使用Nginx来代理静态资源进 ...

  3. Linux.挖矿.cpuminer方法记录

    挖矿一般都要用高端显卡做矿机, 不是一般人玩得起 这里讲的是一种用CPU来挖矿的方法, 纯玩玩, 不要指望能致富喔 本方法在CentOS和树莓派原生系统上测试通过 先从git下载cpuminer gi ...

  4. PHP常用配置

    Php配置文件:php.ini(使用‘;’表示注释) Php的配置项可以在配置文件中配置,也可以在脚本中使用ini_set()函数临时配置. 语言相关配置: 1. engine:设置PHP引擎是否可用 ...

  5. LeetCode 216. Combination Sum III (组合的和之三)

    Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...

  6. 在centos6编译安装http-2.4

    在centos6 编译安装httpd-2.4 安装httpd-2.4 Ü 依赖于apr-1.4+, apr-util-1.4+, [apr-iconv] Ü apr: : apache portabl ...

  7. iOS之 git 简单使用

    之前没有用过git管理代码, 现在 公司要求使用git,咱 就 记记 今天所学的东西.以后也好方便查阅 和补充. 首先 我描述一下我今天提交代码的情况. 同伴给了我一个 从git库下来的2个项目的包. ...

  8. MySQL冗余和重复索引

    MySQL允许在相同列上创建多个索引,无论是有意还是无意,mysql需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个地进行考虑,这会影响性能. 重复索引是指的在相同的列上按照相同的顺序创建 ...

  9. 用编写一个简单的记事本(C#实现)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. CIFAR-10 dataset 的下载与使用

    基本信息 CIFAR-10 是一个包含60000张图片的数据集.其中每张照片为32*32的彩色照片,每个像素点包括RGB三个数值,数值范围 0 ~ 255. 所有照片分属10个不同的类别,分别是 'a ...