目录
现实问题思考
现实问题思考--体重预测身高
更多因素:性别、所在城市、父母身高等
现实问题思考--住宅面积预测售价
更多因素:房间数量、房屋年龄、人口密度、交通便利程度等
现实问题思考--细菌增长数量预测
更多因素:环境温度、营养液余量
回归分析
基于输入数据,确定变量间相互依赖的定量关系
举例:小明开始工资1000,每周增长,第t周的工资是多少(第一周开始算增长)?
线性回归:每周增长100
非线性回归:每周是上周的1.1倍
合理售价=𝑓(面积)合理售价=f(面积)
合理售价=𝑓(面积、房间数、房龄、其他因子)合理售价=f(面积、房间数、房龄、其他因子)
回归问题求解
问题:面积100平米售价120万是否值得投资?
1. 确定x、y间的定量关系
𝑦=𝑓(𝑥)
2. 根据关系预测合理价格
𝑦=𝑓(𝑥=100)
3. 做出判断
算法的求解等效于:寻找合理的a 和 b
求解方法:梯度下降法
从山上某点出发,找到最快的下山路径
寻找函数极小值的一种方法。
核心:计算开始点𝑥𝑖x_i对应梯度,以一定步长向梯度反方向到达新的点x_(i+1),重复此过程,直到x_i 、x_(i+1)几乎不再变化。
Python实战:多因子房价预测
基础环境: Python语言;安装核心工具包numpy、pandas、sklearn、matplotlib;环境管理软件Anaconda;Jupyter notebook
环境配置参考:机器学习入门与Python实战核心工具篇:pip源、python、anaconda、工具包(完整版)https://blog.csdn.net/dfly_zx/article/details/110188923
任务:基于task2_data.csv数据,建立多因子线性回归模型,与只使用面积单因子进行建模预测的结果进行对比。
部分数据:
1、以面积为输入变量,建立单因子模型,评估模型表现,可视化线性回归预测结果
2、以面积、人均收入、平均房龄为输入变量,建立多因子模型,评估模型表现
3、预测面积=160, 人均收入=70000, 平均房龄=5的合理房价
#数据加载
import pandas as pd
import numpy as np
data = pd.read_csv('task2_data.csv')
data.head(10)
#数据可视化
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20,5))
fig1 = plt.subplot(131)
plt.scatter(data.loc[:,'面积'],data.loc[:,'价格'])
plt.title('Price VS Size')
fig2 = plt.subplot(132)
plt.scatter(data.loc[:,'人均收入'],data.loc[:,'价格'])
plt.title('Price VS Income')
fig3 = plt.subplot(133)
plt.scatter(data.loc[:,'平均房龄'],data.loc[:,'价格'])
plt.title('Price VS House_age')
plt.show()
#X y赋值
X = data.loc[:,'面积']
y = data.loc[:,'价格']
print(X,y)
#数据预处理
X = np.array(X)
y = np.array(y)
X = X.reshape(-1,1)
y = y.reshape(-1,1)
print(X.shape,y.shape)
#模型的建立与训练
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X,y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
#模型预测
y_predict = model.predict(X)
print(y_predict)
[[1273463.80967472] [1192500.07431933] [1420564.16140447] ... [1113233.11006996] [1237040.41730573] [1162515.70057855]]
#表现评估
from sklearn.metrics import mean_squared_error,r2_score
MSE = mean_squared_error(y,y_predict)
R2 = r2_score(y,y_predict)
print(MSE)
print(R2)
#结果可视化
fig2 = plt.figure(figsize=(8,5))
plt.scatter(data.loc[:,'面积'],data.loc[:,'价格'])
plt.plot(X,y_predict,'r')
plt.title('Price VS Size')
#X y再次赋值
X = data.drop(['价格'],axis=1)
y = data.loc[:,'价格']
X.head()
#建立多因子回归模型 并且训练
model_multi = LinearRegression()
model_multi.fit(X,y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
#多因子模型的预测
y_predict_multi = model_multi.predict(X)
print(y_predict_multi)
[1463868.24688829 1445981.85185019 1253388.6205439 ... 1285670.68139457 1243839.71867445 1116875.92416746]
MSE_multi = mean_squared_error(y,y_predict_multi)
R2_multi = r2_score(y,y_predict_multi)
print(MSE_multi)
print(R2_multi)
58264450329.88301 0.5550934951789649
#可视化预测结果
fig3 = plt.figure(figsize=(8,5))
plt.scatter(y,y_predict_multi)
plt.xlabel('real price')
plt.ylabel('prdicted price')
plt.show()
#预测面积=160, 人均收入=70000, 平均房龄=5的合理房价
X_test = np.array([[160,70000,5]])
y_test_predict = model_multi.predict(X_test)
print(y_test_predict)
[1235099.47156076]
房价实战summary:
1、通过搭建线性回归模型,实现单因子的房屋价格预测;
2、在单因子模型效果不好的情况下,通过考虑更多的因子,建立了多因子模型;
3、多因子模型达到了更好的预测效果,r2分数从单因子的0.1提高到了0.55;
4、实现了预测结果的可视化,直观对比预测价格与实际价格的差异。
如果现在就想开始学习机器学习,你还可以:
1、添加微信:ai_flare,领取Python编程课(AI方向)、Python实现机器学习,免费领取(仅限前100名)
2、人工智能学习路线:专为AI小白设计的人工智能实战课 - Python3入门人工智能 基础+实战 学习视频教程-CSDN学院