从零开始机器学习(一)

一、相关概念

机器学习
  • 机器学习并没有准确的定义,Arthur Samuel (1959) 定义机器学习为 'Field of study that gives computers the abilety to learn with out being explicitly programmed.'
  • 比较新的定义来自Tom Mitchell (1998): A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.
监督学习
回归(Regression)问题
  • Regression: Predict continuous valued output
  • 假设你得知了房子的大小与价格的关系

    这个时候你可以选择是用直线或者二次函数或者其他的函数拟合数据,以此预测未知的数据,这也被称为回归(Regression)问题。虽然价格是离散的,但是我们可以将其视为实数
分类(classification)问题
  • Classification: Discrete valued output(0 or 1 or more)
  • 假设得到了一组年龄(x2)和肿瘤大小(x1)与肿瘤是否良性(O or X)的关系

这个时候你可以拟合一个分类的函数,然后预测未知的数据,这时候未知的数据是一些离散的值。当然数据可以有许多特征,有很高的维度,预测的函数也不一定是可视化的。

无监督学习
聚类(clustering)问题
  • 假设给定一组数据但是并没有标签,需要程序自动分类,这是聚类
鸡尾酒会(cocktail)问题
  • 给定数据从中区分数据的结构,就像是鸡尾酒混在一起然后提取出不同的酒
关于model
线性回归 (Linear Regression)
  • 假如还是之前那个房价的预测,可以考虑先用简单的函数去拟合数据。比如 hθ(x) = θ01x, h 就是Hypothesis (假设), θ 被称为参数。我们要做的就是参数估计。我们想到的直观约束就是最小化这个式子 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \sum\limits_{i=1}^m \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2} i=1m(hθ(x(i))y(i))2
代价函数

J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J \left( \theta_0, \theta_1 \right) = \frac{1}{2m}\sum\limits_{i=1}^m \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2} J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2
前面的系数是为了不让训练集的数量影响,这个也被称为 Squared error function (平方误差函数)

逻辑斯蒂回归
  • logistic regression虽然被叫做回归,其实是一种分类的算法。分类又有二分类与多分类。其代价函数如下:
    J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]} J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))],叫做交叉熵损失
    详情可见博客四
神经网络
  • 无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。

  • 使用非线性的多项式项,能够帮助我们建立更好的分类模型。假设我们有非常多的特征,例如大于100个变量,我们希望用这100个特征来构建一个非线性的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合 ( x 1 x 2 + x 1 x 3 + x 1 x 4 + . . . + x 2 x 3 + x 2 x 4 + . . . + x 99 x 100 ) (x_1x_2+x_1x_3+x_1x_4+...+x_2x_3+x_2x_4+...+x_{99}x_{100}) (x1x2+x1x3+x1x4+...+x2x3+x2x4+...+x99x100),我们也会有接近5000个组合而成的特征。这对于一般的逻辑回归来说需要计算的特征太多了。

  • 神经网络是个比较古老的算法, 但是硬件的发展给它带来了新的活力

  • 神经网络模型建立在很多神经元之上,每个神经元又是一个学习模型,称为激活单元(activation unit)。神经元作用是采纳输入,根据本身参数得到输出。参数也称为权重(weight)

  • 下面展示一个以逻辑回归作为神经元的实例:
    12
    当然有时也绘制 x 0 x_0 x0,表达起来方便些
    13

  • 这个图就是输入经过权重再通过激活函数得到输出的过程,黄色圈圈代表激活函数,线代表权重。

  • 一组神经元连接在一起就组成了神经网络,如图:
    14
    第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):
    15

下面引入一些标记法来帮助描述模型:

a i ( j ) a_{i}^{\left( j \right)} ai(j) 代表第 j j j 层的第 i i i 个激活单元。 θ ( j ) {{\theta }^{\left( j \right)}} θ(j)代表从第 j j j 层映射到第 j + 1 j+1 j+1 层时的权重的矩阵,例如 θ ( 1 ) {{\theta }^{\left( 1 \right)}} θ(1)代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 j + 1 j+1 j+1层的激活单元数量为行数,以第 j j j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中 θ ( 1 ) {{\theta }^{\left( 1 \right)}} θ(1)的尺寸为 3*4。也很容易理解嘛, θ 0 \theta_0 θ0是与 x 0 x_0 x0也就是1相乘的,所以列是4,行是下一层输出的维度,也就是3个a, a 0 a_0 a0不算。

对于上图所示的模型,激活单元和输出分别表达为:

a 1 ( 2 ) = g ( Θ 10 ( 1 ) x 0 + Θ 11 ( 1 ) x 1 + Θ 12 ( 1 ) x 2 + Θ 13 ( 1 ) x 3 ) a_{1}^{(2)}=g(\Theta _{10}^{(1)}{{x}_{0}}+\Theta _{11}^{(1)}{{x}_{1}}+\Theta _{12}^{(1)}{{x}_{2}}+\Theta _{13}^{(1)}{{x}_{3}}) a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)

a 2 ( 2 ) = g ( Θ 20 ( 1 ) x 0 + Θ 21 ( 1 ) x 1 + Θ 22 ( 1 ) x 2 + Θ 23 ( 1 ) x 3 ) a_{2}^{(2)}=g(\Theta _{20}^{(1)}{{x}_{0}}+\Theta _{21}^{(1)}{{x}_{1}}+\Theta _{22}^{(1)}{{x}_{2}}+\Theta _{23}^{(1)}{{x}_{3}}) a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)

a 3 ( 2 ) = g ( Θ 30 ( 1 ) x 0 + Θ 31 ( 1 ) x 1 + Θ 32 ( 1 ) x 2 + Θ 33 ( 1 ) x 3 ) a_{3}^{(2)}=g(\Theta _{30}^{(1)}{{x}_{0}}+\Theta _{31}^{(1)}{{x}_{1}}+\Theta _{32}^{(1)}{{x}_{2}}+\Theta _{33}^{(1)}{{x}_{3}}) a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)

h Θ ( x ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + Θ 11 ( 2 ) a 1 ( 2 ) + Θ 12 ( 2 ) a 2 ( 2 ) + Θ 13 ( 2 ) a 3 ( 2 ) ) {{h}_{\Theta }}(x)=g(\Theta _{10}^{(2)}a_{0}^{(2)}+\Theta _{11}^{(2)}a_{1}^{(2)}+\Theta _{12}^{(2)}a_{2}^{(2)}+\Theta _{13}^{(2)}a_{3}^{(2)}) hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))

附录

matplot绘图简介教程
最简单的一个绘图程序
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 10) # x是-1到1的10个均匀点
y = 2*x
plt.plot(x, y)
plt.show()
逐步添加要素
1. figure子图
x = np.linspace(-1, 1, 10)
y1 = 2*x
y2 = 2*x+1
plt.figure()
plt.plot(x,y1)

plt.figure(x, y2)
plt.plot(x, y1)

plt.show()
2. 设置坐标轴范围、描述、ticks
plt.xlim(-1, 2) # 改变x轴的范围
plt.ylabel('Price($) of house') # 改变y轴的描述
plt.xticks(np.linspace(-1, 1, 2)) # 原来x是10个点,现在改为两个点
# plt.xticks([-1, -0.5, 0, 0.5, 1],['a', 'b', 'c', 'd', 'e'])
# 如果用字代替ticks需要用两个列表对应起来
  • 结果展示


x轴的1后面出现一段空是因为xlim限制到2但是xticks改为1了

3. pandas读取本地文件并绘图
import pandas as pd 
import matplotlib.pyplot as plt 

path = 'ex1data1.txt' # 这是文件的路径
data = pd.read_csv(path, header=None, names=['size', 'price'])
# read_csv读取时会自动识别表头,数据有表头时不能设置header为空(默认读取第一行,即header=0);
# 数据无表头时,若不设置header,第一行数据会被视为表头,应传入names参数设置表头名称或设置header=None

data.plot(kind='scatter', x='size', y='price')
plt.xlabel('size of feet^2', size=18)
plt.ylabel('Price($) of house', size=18)
plt.show()
  • 如图所示

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

live_for_myself

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值