简单易学的机器学习算法——Logistic回归
时间:2022-05-04
本文章向大家介绍简单易学的机器学习算法——Logistic回归,主要内容包括一、Logistic回归的概述、二、最优化方法确定最佳回归系数、三、Sigmoid函数、四、实验(MATLAB程序)、2、Sigmoid、3、主程序、4、测试的数据以及最终的分类、五、注意点、2、再说说第二处:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
一、Logistic回归的概述
Logistic回归是一种简单的分类算法,提到“回归”,很多人可能觉得与分类没什么关系,Logistic回归通过对数据分类边界的拟合来实现分类。而“回归”也就意味着最佳拟合。要进行最佳拟合,则需要寻找到最佳的拟合参数,一些最优化方法就可以用于最佳回归系数的确定。
二、最优化方法确定最佳回归系数
最优化方法有基于梯度的梯度下降法、梯度上升发,改进的随机梯度下降法等等。基于梯度的优化方法在求解问题时,本身对要求解的问题有要求:即问题本身必须是可导的。其次,基于梯度的方法会使得待优化问题陷入局部最优。此时,一些启发式优化方法可以很好的解决这样的问题,但是启发式算法的求解速度较慢,占用内存较大。
对于确定回归系数这样的问题
不存在多峰,也就是说不存在除最优值之外的局部最优值。其次,这样的问题是可求导的,所以基于梯度的方法是可以用来求解回归系数的问题的。优化算法见optimal algorithm类别。
三、Sigmoid函数
当分类边界的函数被表示出来后,可以使用一种被称为海维塞德阶跃函数(Heaviside step function)来处理,简称为单位阶跃函数。其中Sigmoid函数是其中使用较多的一种阶跃函数。Sigmoid函数如下图:
Sigmoid函数的公式为:
当z为0时,函数值为0.5;
四、实验(MATLAB程序)
1、梯度上升法
%%gradient method
function weights = gradient(x, y)
alpha = 0.001;%Step
maxCycle = 500;
[m,n] = size(x);
weights = ones(n,1);
for i = 1 : maxCycle
h = sigmoid(x * weights);
error = y - h;
weights = weights + alpha * x' * error;%注意点1
end
end
2、Sigmoid
%% sigmoid function
function out = sigmoid(x)
out = 1./(1+exp(-x));
end
3、主程序
%----start-----
data = load('testSet.txt');%导入数据
[m,n] = size(data);%行和列
o = ones(m,1);
dataX = data(:,1:2);
X = [o,dataX];
Y = data(:,3);
%--experiments--
weights = gradient(X,Y);
%% plot the pic
Ypic = X * weights;
x_1 = X(:,2);
x_2 = X(:,3);
hold on
for i = 1 : 100
if Y(i,:) == 0
plot(x_1(i,:),x_2(i,:),'.g');
else
plot(x_1(i,:),x_2(i,:),'.r');
end
end
x = -3.0:0.1:3;
y = (-weights(1)-weights(2)*x)/weights(3);%注意点2
plot(x,y);
4、测试的数据以及最终的分类
五、注意点
在程序的实现过程中有两个注意点,分别用注释标出,第一处在梯度上升法中的求权重weights的公式;第二处是主程序中的注释标出。
1、先说说第一处:
令
则
可知
,假设有m个样本,且样本之间相互独立。则似然函数为
取对数
对其中一个样本而言求偏导:
要求极大似然估计,故要使用梯度上升法求最大值:
2、再说说第二处:
要画出拟合直线,横坐标为x_1,纵坐标为x_2,直线的方程为
,求出x_1和x_2的对应关系即可。
- Android Service学习之本地服务
- iOS .pch文件的使用
- CountDownTimer说明及使用
- UiTextField对输入的长度进行限制并提示用户还可输入的长度
- Spring Cloud实战小贴士:turbine如何聚合设置了context-path的hystrix数据
- iOS 查找字符串 相同 子字符串的位置 range
- 自然语言处理指南(第四部分)
- 史上最强Spring mvc入门
- 上边半透明的效果并且显示的是上一页的内容
- Spring Cloud构建微服务架构:Hystrix监控数据聚合【Dalston版】
- android自定义view实现公章效果
- ios app url scheme跳转到淘宝商品详情页 唤醒app
- ThreadPoolExecutor运行机制
- Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 视频配音篇,如何使用百度翻译将文本转换为mp3语音?
- Objective-C的hook方案/ Method Swizzling
- Python爬虫:无账号无限制获取企查查信息
- Spark Streaming——Spark第一代实时计算引擎
- bamtools分割bam文件
- 在genome browser中添加自己的注释文件
- 原理+代码|Python基于主成分分析的客户信贷评级实战
- Python办公自动化 | 从PPT到Word
- linux命令行参数getopts参数二选一
- 黎巴嫩首都爆炸能量有多大?物理学家看视频计算:300吨TNT!
- OracleDG 环境主备业务数据不同步备库报ORA-600错误的处理过程
- Xcode清理模拟器文件
- 【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】六、FFmpeg简单合成MP4:视屏解封与重新封装
- 32.opengl高级光照-延迟着色法
- Tsunami:一款功能强大的通用网络安全扫描工具