机器学习线性回归案例讲解_机器学习实例--线性回归

一、问题引入

1.首先明确几个概念目前三大最常见的机器学习任务:

1.回归问题

2.分类问题

3.聚类问题

Machine learning机器学习是Artificial inteligence的核心,分为四类:

1、Supervised learning监督学习

是有特征(feature)和标签(label)的,即便是没有标签的,机器也是可以通过特征和标签之间的关系,判断出标签。举例子理解:高考试题是在考试前就有标准答案的,在学习和做题的过程中,可以对照答案,分析问题找出方法。在高考题没有给出答案的时候,也是可以给出正确的解决。这就是监督学习。

一句话概括:给定数据,预测标签。

通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出,例如分类。

2、Unsupervised learning无监督学习

只有特征,没有标签。举例子理解:高考前的一些模拟试卷,是没有标准答案的,也就是没有参照是对还是错,但是我们还是可以根据这些问题之间的联系将语文、数学、英语分开,这个过程就叫做聚类。在只有特征,没有标签的训练数据集中,通过数据之间的内在联系和相似性将他们分成若干类。

一句话概括:给定数据,寻找隐藏的结构。

直接对数据集建模。

以上两者的区别:监督学习只利用标记的样本集进行学习,而无监督学习只利用未标记的样本集。

3、Semi-Supervised learning半监督学习

使用的数据,一部分是标记过的,而大部分是没有标记的。和监督学习相比较,半监督学习的成本较低,但是又能达到较高的准确度。

综合利用有类标的和没有类标的数据,来生成合适的分类函数。

半监督学习出现的背景:实际问题中,通常只有少量的有标记的数据,因为对数据进行标记的代价有时很高,比如在生物学中,对某种蛋白质的结构分析或者功能鉴定,可能会花上生物学家很多年的工作,而大量的未标记的数据却很容易得到。

4、Reinforcement learning强化学习

强化学习也是使用未标记的数据,但是可以通过一些方法知道你是离正确答案越来越近还是越来越远(奖惩函数)。可以把奖惩函数看作正确答案的一个延迟、稀疏的形式。可以得到一个延迟的反馈,并且只有提示你是离答案越来越近还是越来越远。

2.回归问题

通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出。

我们通过这组数据,可以得到房屋大小与房价之间的一个关系:

这条蓝色的线就表示了这样一种关系,我们现在的问题就是找出这样一条线,使其能拟合我们的数据。

注:拟合:能最大程度的表现现有数据的规律

所以现在我们的问题就变成了:(从最开始的预测房价变为了纯数学问题)

注:成本函数:(均方误差)误差求和求平均,此处1/2m是为了后续计算的方便。

接下来的问题是:如何找到这样的Θ0,Θ1,使得损失函数J(Θ0,Θ1)最小呢?

接下来通过样本集的数据计算损失函数:

计算损失函数:J(Θ0,Θ1)=2.3

确定一个点(0,2.3)

计算损失函数:J(Θ0,Θ1)=0

确定一个点(1,0)

计算损失函数:J(Θ0,Θ1)=0.58

确定一个点(1.5,0.58)

函数图像:是类似于最低点是(1,0)点的开口向上的一元二次函数图像。(这里就不画了)

类似于:

我们通过不停的计算Θ0,Θ1,求得最小的J(Θ0,Θ1),显然这样的计算工作是巨大的,这就需要用到梯度下降法了:

从图上来看:

我们模拟一下:想象自己在山顶,想要最快下山(应该朝哪个方向,迈多大的步子,每迈一步,继续做同样的判断),这就是梯度下降法要做的事情。

这每一步,在二维平面上看就像这样:

直到找到这样一个最低点,就是局部最优解,或最优解。

那么,我们在遇到一个线性回归问题时,是不是需要我们每次都写一个预测函数,再定义一个损失函数,最后再实现梯度下降算法呢?并不是这样的,Python中有一个sklearn包都已经封装好了这些常用的机器学习算法,我们只需要用就好了。

二、代码演示

接下来我们用sklearn实现一下这个案例:

%matplotlib inline

import matplotlib.pyplot as plt

import numpy as np

#此处x是房屋面积,y是房价,我们简化了数据,我们有真实的数据,直接替换就好了

x=np.array([1,2,3,4])

y=np.array([4,6,10,16])

from sklearn.linear_model import LinearRegression

# 创建一个线性回归模型

model=LinearRegression()

# 对数据做一个变换(sklearn包的要求)

# reshape(-1,1)数据变为一列,reshape(1,-1)数据变为一行

x=x.reshape(-1,1)

y=y.reshape(-1,1)

# 训练模型

model.fit(x,y)

# 该线性回归模型的训练得分(可以理解为该模型在数据集上的一个准确率)

train_score=model.score(x,y)

# 绘画散点图

plt.scatter(x,y)

plt.plot(x,model.predict(x),'r-')

#模型的训练得分,可以理解为该模型在数据集上的一个准确率

train_score

0.9523809523809523

在机器学习中我们训练模型后,需要把模型保存到本地,这里我们采用joblib来保存

from sklearn.externals import joblib

#保存模型

joblib.dump()

#加载模型

joblib.load()

#通过该模型继续预测

model.predict()

你可能感兴趣的:(机器学习线性回归案例讲解)