最近研究机器学习算法,属于小白,学习了“寒小阳”博主的文章(地址:http://blog.csdn.net/han_xiaoyang/article/details/49123419)后,对机器学习的逻辑回归有了个大概的认识,再借助另一位博主“ Earendil ”(地址:https://www.cnblogs.com/earendil/p/8268757.html)对于其中公式的详细推导,试着用matlab语言自己实现一遍,现与大家分享,代码如下:
clc
clear all
close all
data1 = importdata(‘data1.txt’);
%归一化
data1(:,1) = (data1(:,1)- mean(data1(:,1)))./ std(data1(:,1));
data1(:,2) = (data1(:,2)- mean(data1(:,2)))./ std(data1(:,2));
[m,n] = size(data1);
figure
for row = 1:m
if data1(row,3) == 1
plot(data1(row,1),data1(row,2),’.’);
hold on
else
plot(data1(row,1),data1(row, 2),‘x’);
hold on
end
end
%矩阵化
x0 = ones(m,1);
X = [x0,data1(:,1),data1(:,2)];
[m1,n1] = size(X);
theta = ones(n1,1);%初始化
alpha = 0.001;%步长
for iter = 1:5000
A = Xtheta;
g_A = 1./(1+exp(-A));
y = data1(:,3);
Err = g_A - y;
theta_new = theta - alpha(X’*Err);%更新变量
theta = theta_new;
end
x_1 = data1(:,1);
y_1 = -(theta(1) + theta(2)*x_1)/theta(3);
figure
plot(x_1,y_1);
hold on
for row = 1:m
if data1(row,3) == 1
plot(data1(row,1),data1(row,2),’.’);
hold on
else
plot(data1(row,1),data1(row, 2),‘x’);
hold on
end
end
在此,我将原始数据归一化,得到的结果如下:
这里,有一点有点困惑,原文博主没有将原始数据归一化,也能求得正确的分界线,但是我如果不归一化,就会得到错误的结果,如下图:
机器学习小白,有两点问题:
1、为什么不讲数据归一化,就得不到正确的分界线?
2、关于博主“ Earendil ”公式推导中,如下划线部分总觉得掉了一个负号。但是按照博主推导结果却得出了正确的分界线(数据归一化后),是我对公式推导的误解吗?请大牛们不吝赐教。
|
请发表评论