机器学习实验基于 Logistic回归和Sigmoid函数的分类.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[实验项目]
基于Logistic回归和Sigmoid函数的分类
[实验目的]
分析已知样本,求出回归系数,利用梯度上升法不断精确回归系数,并
分别输出至二维坐标中
[实验原理]
Sigmoid函数:对于任何输入,输出为0到1之间的数,根据其大于0. 5 或小于0. 5分为两类
[设计内容]
logistic冋归的一般过程
(1)收集数据:采用任意方法收集数据。
(2)准备数据:由于需要进行距离计算,因此要求数据类型为数值型。
另外,结构化数据格式则最佳。
(3)分析数据:采用任意方法对数据进行分析。
⑷训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数。
(5)测试算法:一旦训练步驟完成,分类将会很快。
(6)使用算法:首先,我们需要输入一些数据,并将其转换成对应的结
构化数值;接着,基于训练好的回归系数就可以对这些数值进行简单的
回归计算,判定它们属于哪个类别,在这之后,我们就可以在输出的类
别上做一些其他分析工作。
%读取数据 %将数据赋给变量
%根据点的类别画出两种点x 和()
[设计过程]—包括程序数据结构设计过程,代码模块设计,程序流程 图等。
函数 logistic grad ascent (X, y, num ):
logistic 回归函数,X 为已知数据(本实验中为二维数组),y 为每组 数据对应的概率值(0到1之间)小为迭代次数(自行添加的) 函数 sigmoid (z )= 1.0 ./ (1.0 + exp (-z )):
其中 z=theta0+theatl*xl+theta2*x2 (xl, x2 为 qlx. data 中的数据) 主程序: 读取qlx. data ; qly. data 并取出数据,做循环,根据qly 中的概率分 两类打印出qlx 中的点至二维坐标中,再调用1
ogistic_grad_ascent 函数得到theta,根据theta 画出最佳拟合直线; [主要数据结构]一包括代码主要数据结构,及其注释。
由于两个函数及学习数据己经给出,此处只附自己写的主程序 load qly. dat load qlx. dat x=qlx(:, 1); y=qlx(:, 2);
X = [x, y]; p=qly(:, 1);
for i 二1:99
if p(i)==l
plot (x(i), y(i), ' bx') else if p(i)==0
plot(x(i), y(i), 'bo') end end
hoid on
end
%带入函数求回归系数;迭代次数为10
[theta, 11]二 logistic grad ascent(X, p, 10); a = [0:0. 1:8];
b = (-theta(1)-theta(2)*a)/theta(3);
plot (a, b) %画出拟合直线
text(& (-theta(l) - theta(2)*8)/theta(3),' \ left ar row 10'); % 标注
[theto, 11 ]二 logi stic_greid_Eiscent (X, p, 50);
a = [0:0.1:8];
b = (-theta(1)-theta(2)*a)/theta(3):
plot (a, b)
text(8, (-theta(1)-theta(2)*8)/theta(3), * \leftarrow 50');
[theta, 11] = logistic grad ascent(X, p, 500);
a = [0:0. 1:8];
b = (-theta(1)-theta(2)*a)/theta (3);
plot (a, b)
text(8, (-theta(1)-theta(2)*8)/theta(3), * \leftarrow 500');
[theta, 11] = logistic grad ascent(X, p, 5000);
a = [0:0. 1:8];
b = (-theta(1)-theta(2)*a) /theta(3);
plot (a, b)
text (8, (-theta (1) -theta (2) *8) / theta (3),J \ left ar row 5000');
[theta, 11] = logistic grad ascent(X, p, 10000);
a = [0:0. 1:8];
b = (-theta(1)-theta(2)*a)/theta(3);
plot (a, b)
text(8, (-theta(1)-theta(2)*8)/theta(3),J \leftarrow 10000');
[代码调试过程]—包括程序编译、执行过程中遇到的主要错误,及解决过程说明。
从文件中读取数据时行列弄反
ThetaO, thetal, theta2 次序弄错
加入迭代变量时与己有变量名称n重名导致错误
解决:修改logistic_grad_ascent函数中的第三个输入变量为num [讨论]附运行截图
[心得体会]
通过本次实验 熟悉了对mat lab 的使用,加深了对回归算法的理解,对 相关公式加深了记忆和理解,收获很多。
X
4
X
3 ■ 500
■ 50
♦- 10
-5000 -10000。