1.分类原理
1.1 逻辑回归
逻辑回归算法是一个分类算法,其性质是它的输出值永远在0到1之间,是目前最流行、最广泛使用的一直学习算法。
1.2 Sigmoid函数
根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们需要输出0或1,此时引入逻辑回归模型,模型核心为Sigmoid函数,公式为:$g(z)=\frac{1}{1+e^{-z}}$
其中:$z=-\Theta^{T} X$
该函数图像为:
$h_{\Theta}(x)$的作用是对于给定的输入变量,根据选择的参数计算出输出变量=1的可能性。
1.3 代价函数
在逻辑回归中可以判定当$h_{\Theta}(x)$大于等于0.5时,预测y=1。
当$h_{\Theta}(x)$小于0.5时,预测y=0。
使用梯度下降算法求使得代价函数最小的参数:
2.算法实现
2.1 Sigmoid函数python实现
1 | import numpy as np |
2.2 梯度下降算法python实现
1 | def gradAscent(dataMatIn, classLabels): |
3.数据集说明
参考数据集网址: http://archive.ics.uci.edu/ml/
本次机器学习逻辑回归算法实现分类使用的是经典数据集 Iris Data(鸢尾花数据集),数据集包含3个类(Iris Setosa、Iris Versicolour、Iris Virginica),每个类有50个实例,其中每个类都涉及一种鸢尾花品种。预测的属性为鸢尾花植物的类别。
此次算法实现中删掉了其中一个鸢尾花种类,算法引入的数据集只做鸢尾花种类的二分类,并且分别将鸢尾花种类数据集按 8:2 的比例分为训练数据集和测试数据集。
鸢尾花数据集的属性信息:
- 萼片长度(厘米)
- 萼片宽度(厘米)
- 花瓣长度(厘米)
- 花瓣宽度(厘米)
逻辑回归分类算法的模型训练过程使用鸢尾花的全部四个特征,将鸢尾花样本可视化及分类可视化过程选取了鸢尾花的前两个属性(萼片长度、萼片宽度)。
4.程序说明
4.1 载入数据集
将源数据集载入算法,并初始处理样本,将鸢尾花种类分为正向类和负向类。函数返回鸢尾花的特征向量和对应的鸢尾花种类向量。
1 | """载入数据集""" |
4.2 分类可视化
4.2.1 鸢尾花数据集二分类
为了直观理解分类结果,便于可视化,利用matplotlib库的pyplot函数,按照鸢尾花数据特征中的萼片长度、萼片宽度属性绘制训练数据集的散点图,并绘制判定边界。
1 | def plotBestFit(weights): |
4.2 分类结果
4.3 鸢尾花测试集预测
4.3.1 预测函数
1 | def predictClass(): |
4.3.2 预测结果
测试可视化过程只选取了梯度下降法得到的前三个最优权值,以此计算预测结果(sigmoid函数值)。
鸢尾花测试数据集为:
1 | 5.1,3.5,1.4,0.2,Iris-setosa |
由模型测试图可看出测试结果可辨。
5.附录
load_data.py
1 | """载入数据集""" |
sigmoid.py
1 | import numpy as np |
gradascent.py
1 | import matplotlib.pyplot as plt |
predice_classfication.py
1 | from sigmoid import sigmoid |