机器学习-监督学习-1

好久没写博客了,今天开始总结下几个月来学习的机器学习相关内容

机器学习的门槛就现在而言越来越低了,想要深入研究可能需要很扎实的数学基础,但是简单的使用只需要有一定的理解能力,以及一定的编程能力,我会简单介绍算法中的数学原理方便理解其中的参数,如果你想要深入理解其中的数学原理,推荐 - 周志华<机器学习>(西瓜书)


进行这部分的学习你所需要的基础

  • 了解python的基础语法
  • 拥有一定的对数据集进行处理的能力(主要是numpy以及pandas的使用)
  • 一定的 高数 / 线性代数 / 概率论 基础(知道基本的概念即可,例如转置,贝叶斯公式等,不会涉及太难的)

如果你上面的东西有一些不知道,那么建议你先去看一看,当然遇到了现学也可以(例如一些数学概念),如果你符合上述要求,那么让就我们开始吧


首先是机器学习的第一部分

监督学习-线性回归

在正式接触监督学习算法及使用方法之前,作为监督学习的第一篇文章,我们还是先介绍一下

什么是监督学习

简单来讲监督学习就是对你拥有的数据进行总结,归纳其中的规律,然后根据计算机总结的规律对未知数据进行预测.

受西瓜书影响,这里举个西瓜的例子,你的目的是想要使用机器学习预测一个西瓜的好坏,在监督学习中,你需要做的是给监督学习算法一堆数据,其中要求拥有西瓜的各项特征,并且拥有一个标签,标明他是一个好的西瓜还是坏的西瓜,在这之后,监督学习算法会总结好西瓜的各项特征的规律,以及坏西瓜的各项规律,当训练结束,你再次给监督学习算法西瓜特征的时候,他会根据以前的数据总总结的经验,告诉你,这个特征的西瓜是好西瓜的可能性大还是怀西瓜的可能性大

首先第一个,最经典的监督学习算法就属线性回归了,你即使没有接触过机器学习你应该也听说过这个算法,这里讲一下线性回归的使用原理

从二维的角度最好理解,看图(图源网络侵删)
这里写图片描述

(相信你能理解回归的意思) 对于二维我们的初始给的数据就是平面上的一堆散点,然后算法通过散点去寻找一条直线使得与所有点的距离之和最小,然后通过这条直线去猜测对应的值,比如在图中给定广告费,你就可以去利用这条线去预测销售额,同理类推,我们三维数据拟合的是一个面,四维以上就需要自己想象了

那么这个算法的重点是如何通过所给数据点去最好的拟合一条直线,然后去预测

在正式讨论拟合过程之前,我们优先讨论评价一条直线拟合效果的指标,然后根据这个指标去优化我们的算法,之前我说过,评价一条直线拟合的是否到位是根据所有点到直线的和最小,那么最直接的评价就是计算每个点到直线的距离然后求和就可以了

但是在实际操作过程中,并不是真的对每一个点到直线的距离然后进行求和,原因是这样的,我们先看一下点到直线距离的公式这里写图片描述我们对每一个点进行这样的运算然后求和,运算量太大.仅仅作为一个衡量标准来说,这样不合算,我们一般采用的是平均平方误差这里写图片描述
公式中y是真实x值对应的y,y^是这个x对应的回归直线的值,m是点的数目,这个公式中因为平方的存在,导致直线上下的点都是正值

或者使用平均绝对值误差,放公式
这里写图片描述
两种误差评价方式没有绝对的好坏之分

在讨论过误差的计算方式过后,我们最终来说明这一条回归的直线到底是怎么被计算出来的(以便于理解的目的,这里我们只说做法,不谈数学证明)以二维数据为例子

假设一堆点在一个平面中

第一步 在这个面中随机生成一条直线 y = W1 x +W2
第二步 根据平面中的每一个点去修改这条线的位置和方向
第三步 评估更新后误差大小

这里里面相信第一步和最后一步相对好理解,这里说一下第二步的实现方法,根据每一个点去调整直线的位置和方向,具体做法是从第一个点开始,但看这个点,不管其他点,使得直线与这个点的距离减小

例如我们随机设置的直线方程为y = W1 x +W2
第一个点的坐标是(a,b)
我们调整直线使得直线距离这个点近一点的方式
y = (W1±a) x + (W2±b)
这里使用的是±当点在直线之上时为+之下为 - 我们可以很简单的判断一个点是在直线之上还是直线之下,把点带入直线方程就可以了
这里还有一个问题当这个点的坐标离直线距离极大的时候当我们使用这个公式时这个点对直线方程的改变就太大了,我们不希望一个点对方程本身拥有太大的改变,所以这里我们引入了另一个比较重要的概念Learning Rate:α(学习率)
我们在通过点来改变直线方程的时候在前面加一个学习率来减小直线改变的幅度,方程就变为
y = (W1±αa) x + (W2±αb) 这样就有效的额减少对直线方程的改变幅度,同时,误差的大小一般呈现U型,如果一次改变较大我们可能就会错过那个误差最低点

另一点要强调的是前面我说的根据平面中的”每一个点”去修改这条线的位置和方向并不准确,无论是逐个在每个点使用去下降误差并重复这里流程,还是同时在每个数据点应用,都不是一个很好的方法,如果你的数据十分庞大,两种方法的计算速度都将会很缓慢。线性回归的最佳方式是将数据拆分成很多小批次。每个批次都大概具有相同数量的数据点。然后使用每个批次更新权重.

讲到这里,线性回归的计算方式就基本讲清了,但是如果想要去实现这样的代码,可能还需要极强的数学和算法编程功底,然而,我们的sklearn包中已经集成了这样的算法,不需要我们真正的去从头编写

# 导入必要的包
# pandas 数据分析中最经常使用的包
import pandas as pd
# 线性回归
from sklearn.linear_model import LinearRegression

# 通过pandas去导入我们的数据集
bmi_life_data = pd.read_csv("bmi_and_life_expectancy.csv")

# 创建一个线性回归模型
bmi_life_model = LinearRegression()
# 训练这个模型
bmi_life_model.fit(bmi_life_data[['BMI']], bmi_life_data[['Life expectancy']])

# 使用我们训练好的模型去预测结果
laos_life_exp = bmi_life_model.predict(21.07931)

可以看到,我们前面讲了那么大一堆,真正用的时候是非常简单的,这里使用的是一个二维的数据,这个也同样适用于高维数据,只要将model.fit(x_values, y_values)中的x_value换成多维数组就可以了

这里单纯贴出的代码只是基本使用,我们在这里贴出官方文档sklearn-线性回归你可以去了解一下其中的参数


讲到这里我们的线性回归基本就结束了,第一次写这种东西,下周更感知器算法,我争取一周一更,在每一大章的最后我会写个实际项目,方便理解这些算法的实际用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值