线性回归算法 Linear Regression

机器学习的目的主要是找到目标值 T和 一堆数据之间的关系,而确定机器学习中的关系的方法有:分类和回归。

怎么去区分分类和回归呢?看目标值  是定性的值还是定量

A: 预测明天是多少度?数据有今天的度数x,天气情况y(晴天,雨天,阴天);

B: 预测明天是什么天气?数据有今天的度数x,天气情况y(晴天,雨天,阴天);

一起来看看A和B两个例子;今天的度数x是一个连续的值;而天气情况确实一个类别,三种情况选其一;

回归分析(Regression Analysis)是统计学的数据分析方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型以便观察特定变量来预测其它变量的变化情况。

线性回归 = 线性 + 回归

线性回归算法(Linear Regression)的建模过程就是使用数据点来寻找最佳拟合线。公式,y = mx + c,其中 y 是因变量,x 是自变量,利用给定的数据集求 m 和 c 的值。
线性回归又分为两种类型,即
简单线性回归(simple linear regression),只有 1 个自变量;*多变量回归(multiple regression),至少两组以上自变量。

看的糾結. 來看下StatQuest的例子

图片来源:StatQuest

在StatQuest例子中,需要找到老鼠体重和老鼠尺寸大小之间的关系,数据点如上图。看着线性关系挺明显的。

第一步:假设关系

老鼠大小 = a * 老鼠体重 + b

怎么确定a和b的值就是线性回归的目标。

顺便提一下,这个就是假设函数 h(x),h代表的是假设英文的头字母(Hypothesis)

根据数据,我们可以画出无数条线来表示这个线性关系。到底怎么去选择最优的呢?

不管画的线如何变,数学表达式不会变。

老鼠大小 = a * 老鼠体重 + b

在已知的数据中,老鼠体重是对应的一个实际值的,定义为 实际值_i;

| 预测值_S - 实际值_R |  又造出了一个 损失函数(Cost Function),也就是说所决定的关系要使得 损失函数最小。

图片来源:StatQuest

夠煩了, 試試吧!

预测波士顿的房价, 波士顿房价数据集包含波士顿郊区住房价值的信息。

一、数据介绍
此数据是一份源于美国某经济学杂志上,分析研究波士顿房价( Boston House
Price)的数据集。数据集中的每一行数据都是对波士顿周边或城镇房价的描述:
CRIM: 城镇人均犯罪率
ZN: 住宅用地所占比例
INDUS: 城镇中非住宅用地所占比例
CHAS: CHAS 虚拟变量,用于回归分析
NOX: 环保指数
RM: 每栋住宅的房间数
AGE: 1940 年以前建成的自住单位的比例
DIS: 距离 5 个波士顿的就业中心的加权距离。
RAD: 距离高速公路的便利指数
TAX: 每一万美元的不动产税率
PRTATIO: 城镇中的教师学生比例
B: 城镇中的黑人比例
LSTAT: 地区中有多少房东属于低收入人群
MEDV: 自住房屋房价中位数(也就是均价)

二、任务介绍
1、通过数据挖掘对影响波士顿房价的因素进行分析。
2、搭建一个波士顿房价预测模型。

数据预处理与特征分析

MEDV作为目标变量,也就是因变量,其他变量作为自变量。

特征选择

特征维度较大,为了保证模型的高效预测,需要进行特征选择。每种特征都有自己含义和数据量级,单纯地依靠方差来判断可能效果不好,直接使用与目标变量的相关性强的变量作为最终的特征变量。

通过相关系数法进行特征选择

import pandas as pd
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
 
#把数据转化成pandas的形式,在列尾加上房价PRICE
boston_dataset=datasets.load_boston()
data=pd.DataFrame(boston_dataset.data)
data.columns=boston_dataset.feature_names
data['PRICE']=boston_dataset.target
 
#取出房间数和房价并转化成矩阵形式
x=data.loc[:,'RM'].values
y=data.loc[:,'PRICE'].values
 
#进行矩阵的转置
x=np.array([x]).T
y=np.array([y]).T
 
#训练线性模型
l=LinearRegression()
l.fit(x,y)
 
#画图显示
plt.scatter(x,y,s=10,alpha=0.3,c='red')
plt.plot(x,l.predict(x),c='blue',linewidth='2')
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值