加州房价篇 (三) : 模型的训练,评估和房价的预测

万事俱备!

运行本篇文章代码时必须先按顺序运行加州房价篇 (一) : 了解数据加州房价篇 (二) : 处理数据中的所有代码

在正式开始之前,我们得先把我们的数据分成训练集(train set)和测试集(test set),因为要避免过度拟合(overfit),在中文里,矫枉过正的意思和过度拟合非常像,

打个比方,我现在在和女生甲谈恋爱,我问甲喜欢什么样的男生,甲说她喜欢短头发的男生,还说她喜欢听歌,喜欢吃辣,合计一百条规矩,我按照这些标准去要求自己,和甲处的很好,后来因为一些原因我和甲分手了,我又和女生乙谈恋爱,结果乙喜欢长头发的男生,喜欢写诗而不喜欢听歌,喜欢吃清淡的食物,这个时候我的处境就非常尴尬

从机器学习的角度来说,这个时候我在和女生谈恋爱这件事上,就过度拟合了,我应当是要让自己符合大部分女生的要求,我们的模型也应当是要对加州大部分地区都能做出预测,而不是只能预测我们同事收集过数据的地区

把数据分成训练集和测试集,就好比我在和甲谈恋爱时也和乙保持联系,那我的头发可能就不是短而是中等长度,我在学唱歌的同时也会学写诗,总而言之,能避免过度拟合

test_ratio=0.2 #打算把数据中%20的地区放入测试集
shuffled_indices = np.random.permutation(len(housing_complete)) # 打乱一下顺序
test_set_size = int(len(housing_complete) * test_ratio)
test_indices = shuffled_indices[:test_set_size] 
train_indices = shuffled_indices[test_set_size:]# 获得对应的下标
#一般来说,把完全处理好的特征集记作X,目标集记作y
X_train=housing_complete.iloc[train_indices]
X_test=housing_complete.iloc[test_indices]
y_train=housing_target.iloc[train_indices]
y_test=housing_target.iloc[test_indices]

看看是不是一一对应

len(housing_complete)

输出:20640

len(X_train)

输出:16512

len(X_test)

输出:4128

4128+16512=20640

选择,训练并评估模型

加州房价篇是入门篇,旨在让大家对机器学习的整个过程有一个全面的认识,广度和深度之间往往无法兼顾,模型的原理我在后面的篇章中会有详细的阐述

机器学习经过这么多年的发展,前人已经为我们准备好了许多久经磨砺,却又经久不衰的模型,比如随机森林(RandomForest)模型,我们拿来就能用

from sklearn.ensemble import RandomForestRegressor
forest_reg = RandomForestRegressor()
forest_reg.fit(X_train, y_train)#用训练集训练模型

利用测试集的前十个地区,我们来看看效果

forest_reg.predict(X_test[:10])

输出:
在这里插入图片描述

y_test[:10].values

输出:
在这里插入图片描述

嗯,除了第一个地区差距有点大之外,还不赖,不过我们就只能用肉眼来判断一个模型的好坏吗?

当然不是,现在一般用均方根误差(RMSE)来表示一个模型的好坏,感兴趣的朋友可以搜索均方根误差,看看具体的公式,简而言之,得出的数字越小,模型越好,数字越大,模型越差,我们来试试

from sklearn.metrics import mean_squared_error
test_predict=forest_reg.predict(X_test)
MSE=mean_squared_error(test_predict,y_test)
RMSE=np.sqrt(MSE)
RMSE

输出:
50729

y_test.describe()

输出:
在这里插入图片描述

测试集的数据中,房价最大值有50万,最小值2万,而模型的误差在5万,这个结果只能说是一般

但是仔细想想,我们才读了三篇文章,就已经几乎能做到一整个拿着高薪的分析师团队耗费大量时间才能做到的事情,这正是机器学习的魅力所在

加州房价篇到此结束,下一个篇章:手写数字识别篇

对应源码(需下载后查看)

对应视频

原文章地址

转载请注明出处

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,我们可以使用线性回归模型预测加利福尼亚州的房价。以下是使用MATLAB实现线性回归模型的步骤: 1.首先,我们需要准备数据集。可以使用公开的加利福尼亚州房价数据集,该数据集包含了加利福尼亚州各个地区的房价以及一些相关特征,例如房间数、卧室数、人口数等等。可以使用MATLAB自带的数据集加载工具箱来加载数据集。 2.接下来,我们需要对数据集进行预处理。这包括数据清洗、特征选择、特征缩放等等。可以使用MATLAB自带的数据预处理工具箱来完成这些任务。 3.然后,我们需要将数据集分为训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。 4.接下来,我们可以使用MATLAB自带的线性回归工具箱来训练线性回归模型。可以选择不同的损失函数、正则化方法等等来优化模型。 5.最后,我们可以使用训练好的模型预测新的房价。可以使用MATLAB自带的预测工具箱来完成这个任务。 以下是MATLAB代码示例: ```matlab % 加载数据集 load california_housing_dataset % 数据预处理 X = [ones(size(housing, 1), 1) housing(:, 1:end-1)]; y = housing(:, end); [X, mu, sigma] = zscore(X); y = (y - mean(y)) / std(y); % 划分训练集和测试集 m = size(X, 1); idx = randperm(m); X_train = X(idx(1:round(0.7*m)), :); y_train = y(idx(1:round(0.7*m)), :); X_test = X(idx(round(0.7*m)+1:end), :); y_test = y(idx(round(0.7*m)+1:end), :); % 训练线性回归模型 lambda = 0.1; theta = trainLinearReg(X_train, y_train, lambda); % 预测新的房价 price = [1, 1650, 3] * [0; (theta(2:end) ./ sigma')']; price = price * std(y) + mean(y); % 输出预测结果 fprintf('Predicted price: $%f\n', price); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值