机器学习课程结束总结

Read more →

从零开始使用TensorFlow建立简单的逻辑回归模型

TensorFlow 是一个基于 python 的机器学习框架。在 Coursera 上学习了逻辑回归的课程内容后,想把在 MATLAB 中实现了的内容用 TensorFlow 重新实现一遍,当做学习 Python 和框架的敲门砖。 目标读者 知道逻辑回归是什么,懂一点 Python,听说过 TensorFlow 数据集 来自 Coursera 上 Andrew 的机器学习课程中的ex2data1.txt,根据学生的两次考试成绩判断该学生是否会被录取。 环境 Python 2.7 - 3.x pandas, matplotlib, numpy 安装 TensorFlow 在自己的电脑上安装 TensorFlow 框架,安装方法过程不赘述,CPU 版相对更容易一点,GPU 版需要 CUDA 支持,各位看官看情况安装就好。 开始 创建一个文件夹(比如就叫做tensorflow),在文件夹中创建一个 Python 文件main.py,并将数据集文件放到这个文件夹下: 数据形式: 前两列分别为两次考试成绩(x1, x2),最后一列为是否被录取(y),1代表被录取,0则反之。 在源文件main.py中,我们首先引入需要的包: import pandas as pd # 用于读取数据文件 import tensorflow as tf import matplotlib.pyplot as plt # 用于画图 import numpy as np # 用于后续计算 pandas是一个数据处理相关的包,可以对数据集进行读取和其他各种操作;matplotlib可以用来把我们的数据集绘成图表展示出来。
Read more →

机器学习-神经网络(反向传播算法)学习总结

今天下午完成了Andrew Ng的机器学习课程第五周的课程,完成了自己实现一个基本神经网络的编程作业,不得不说神经网络的运算量真大啊,我的CPU温度都快上100了…… 第四周与第五周共两周的内容讲了神经网络的由来和表示方法以及实现方法。 为什么要使用神经网络 与之前学过的逻辑回归相比,在逻辑回归的假设函数 (h_\theta(x)) 中: $$ g(z) = \frac{1}{1+e^{-z}} $$ $$ z = \theta^Tx $$ 可以看到,(z)的形式是线性的,这意味着你只能拟合这样的数据: 即:决策边界只用一次方程就可以表示 或者是这样的数据: 即:特征数量不多,可以通过添加高次项的方法形成不规则的决策边界。 但是如果你需要识别一张图片中是否有车辆出现: 假设用作样本的图片只有 (50\times50) 像素大小,这样的话你可能输入的特征数量就是 (50\times50=2500) 个(只用灰度值,如果用RGB表示的话特征数量会变成 (2500\times3=7500) 个),这还只是全部是一次方项的情况,但如果需要的决策边界是形如这样的: 你需要一个不规则的决策边界表示方法,这时你可能会引入高次项,即使只增加二次项: $$ x_ixj $$ 这样的话特征数量就会变成: $$ \frac{(1+2500)\times2500}{2} \approx 3,000,000 $$ 用这个数量级的特征去做逻辑回归,计算量是非常恐怖的。因此需要一种能够降低运算量的模型来避免这种问题的出现。 神经网络(Neural Network)受启发于人类大脑。我们知道,人类的大脑就是通过无数的神经元之间互相传递信息来工作的。神经元(Neuron)是这其中的信号传递单元,形如下图: 可以看到,神经元可以接收与其相连接的神经元的信号,自身对其进行处理,然后将信号再发送给其他与自己相连的神经元。受此启发,我们得到了工作方式类似的神经元模型: 可以看到,橙色的节点接受左边三个节点的输入,并计算出我们需要的输出值 (h\theta(x))。其中 (x_0) 是所谓的偏置单元(bias unit)。我们把输入表示为: $$ x = \begin{bmatrix} x_0 \ x_1 \ x_2 \ x_3 \end{bmatrix} \qquad \theta = \begin{bmatrix} \theta_0 \ \theta_1 \ \theta_2 \ \theta_3 \end{bmatrix} $$
Read more →

机器学习-逻辑回归学习总结

终于把Coursera上Andrew的机器学习课第三周完成了😌 第三周主要讲了逻辑回归(Logistic Regression)的概念和实现方法。 在课程中,Andrew讲到逻辑回归主要是为了解决分类问题(Classification),即最终我们需要得到的结果是几个离散的值,例如*是/不是*的二分类问题,就可以看作是对其取值——是:(y=1),不是:(y=0) 在这种情境下,区别于上一章的线性回归(Linear Regression),这里的假设函数(Hypothesis)采用Sigmoid函数,意在表示某一样本属于其中一个分类的概率: $$P(y=1|x;\theta) = h\theta(x) = g(\theta^Tx)$$ $$g(z) = \frac{1}{1+e^{-z}}$$ (g(z))的函数图像如下: 可以看出,这个函数的取值范围是([0, 1]),正好符合概率的定义,即一个事件发生的概率最大为1(绝对发生),最小为0(绝不发生)。而在分类中,一个样本总是属于一个类别((y=1 || y=0)),不存在中间值,因此我们规定: $$ y=\begin {cases} 1, & h\theta(x) \geq 0.5 \ 0, & h\theta(x) < 0.5 \end {cases} $$ 由上图可知,当(h\theta(x) \geq 0.5)时,(z \geq 0),即(\theta^Tx \geq 0)。 为了满足这个条件(即(\theta^Tx \geq 0)),引入决策边界(Decision Boundary)的概念。以课程中的例子为例: 在有两个特征((x_1, x_2))的情况下,令(z = \theta_0 + \theta_1x_1 + \theta_2x_2 = 0),可以在上图中得到一条直线(决策边界),将分别取属于两个类别的样本划分开来。 在这个例子中,根据上面的公式,我们可以规定:当(\theta_0 + \theta_1x_1 + \theta_2x_2 \geq 0)时,我们预测(y = 1);当(\theta_0 + \theta_1x_1 + \theta_2x_2 < 0)时,我们预测(y = 0);
Read more →