您现在的位置是:首页 > 正文

机器学习入门与Python实战(二):回归分析 Regression Analysis

2024-01-30 19:46:57阅读 0

目录

现实问题思考

回归分析

回归问题求解

求解方法:梯度下降法

Python实战:多因子房价预测


现实问题思考

现实问题思考--体重预测身高

更多因素:性别、所在城市、父母身高等

 现实问题思考--住宅面积预测售价

更多因素:房间数量、房屋年龄、人口密度、交通便利程度等

 现实问题思考--细菌增长数量预测

更多因素:环境温度、营养液余量

回归分析

基于输入数据,确定变量间相互依赖的定量关系

举例:小明开始工资1000,每周增长,第t周的工资是多少(第一周开始算增长)?

线性回归:每周增长100

非线性回归:每周是上周的1.1

合理售价=𝑓(面积)合理售价=f(面积)

合理售价=𝑓(面积、房间数、房龄、其他因子)合理售价=f(面积、房间数、房龄、其他因子)

回归问题求解

问题:面积100平米售价120万是否值得投资?

1. 确定xy间的定量关系

𝑦=𝑓(𝑥)

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学院

网站文章

  • Redis系列-JAVA与redis整合-JedisPool的使用

    JedisPoolAPI package com.jedis; import java.util.LinkedList; import java.util.List; import java.util.ResourceBundle; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; im

    2024-01-30 19:46:49
  • Java集合

    【代码】Java集合。

    2024-01-30 19:46:41
  • Redis系列——第四章 Redis发布订阅模式

    Redis系列——第四章 Redis发布订阅模式

    Redis系列 Redis系列——第一章 Redis配置文件 Redis系列——第二章 Redis数据类型以及基本使用 Redis系列——第三章 Redis开启事务并实现乐观锁 Redis系列——第四章 Redis发布订阅模式 Redis系列——第五章 Redis持久化策略RDB与AOF Redis系列——第六章 Redis主从同步 Redis系列——第七章 Redis开启哨兵模式 ...

    2024-01-30 19:46:13
  • 数字化研发项目方案(下)

    数字化研发项目方案(下)

    IETP的主要功能包括通用的人机交互界面,方便用户快速定位、浏览所需内容的导航树,提供电子技术手册图文对照浏览功能,支持语音、视频、虚拟仿真等其他多媒体格式,对于故障隔离等具有决策树支持的工作,可以通...

    2024-01-30 19:45:57
  • linux nss升级,Linux系统升级

    首先查看当前版本信息# uname -aLinux localhost.localdomain3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC ...

    2024-01-30 19:45:30
  • UniApp开发安卓以及H5实现页面级权限管理,避免用户浏览器直接输入url访问页面 最新发布

    UniApp开发安卓以及H5实现页面级权限管理,避免用户浏览器直接输入url访问页面 最新发布

    uni-app如何像vue-router中的beforeEach一样实现跳转拦截功能呢?为此uniapp官方提供了专门的API方法。

    2024-01-30 19:45:22
  • Mac M1安装Homebrew记录

    Mac M1安装Homebrew记录

    由于我是从老的MacBook Pro迁移到M1的,所以老的Homebrew版本在M1 ARM上已经不可用了。

    2024-01-30 19:45:15
  • C#无边框窗体移动代码

    #region 窗体移动 private Point mouseOff;//鼠标移动位置变量 private bool leftFlag;//标签是否为左键 ...

    2024-01-30 19:44:44
  • 基于G.1070的视频质量无参考打分集成回顾

    一、前言摆在面前的一个问题:视频会议在大规模使用后,如何评估、如何监控线上视频质量?视频质量的评估方法通常有有参考评估、无参考评估、半参考评估。其中:有参考评估需要原始视频和经过损伤的有损视频,通常原始视频不易获取,并且评估耗时较多;无参考评估仅需要有损视频即可进行,但结果与主观打分的符合度相对有参考要差一些,但好在耗时不多;半参考评估比较鸡肋,虽然不需要原始视频,但需要原始视频的部...

    2024-01-30 19:44:31
  • jquery validate 动态添加自定义校验规则

    需求:再已有验证(也是基于validate插件,验证功能写在表单中,不是用js代码,如:required写在input中)基础上如何自定义,并动态绑定到指定元素上,并通过$("#formid").va...

    2024-01-30 19:44:24