线性回归 - 实现特征缩放
Linear Regression - Implementing Feature Scaling
我试图在 Octave 5.1.0 中对一个将 GRE 分数与录取概率相关联的数据集实施线性回归。
数据集是这样的,
337 0.92
324 0.76
316 0.72
322 0.8
.
.
.
我的主要 Program.m 文件看起来像,
% read the data
data = load('Admission_Predict.txt');
% initiate variables
x = data(:,1);
y = data(:,2);
m = length(y);
theta = zeros(2,1);
alpha = 0.01;
iters = 1500;
J_hist = zeros(iters,1);
% plot data
subplot(1,2,1);
plot(x,y,'rx','MarkerSize', 10);
title('training data');
% compute cost function
x = [ones(m,1), (data(:,1) ./ 300)]; % feature scaling
J = computeCost(x,y,theta);
% run gradient descent
[theta, J_hist] = gradientDescent(x,y,theta,alpha,iters);
hold on;
subplot(1,2,1);
plot((x(:,2) .* 300), (x*theta),'-');
xlabel('GRE score');
ylabel('Probability');
hold off;
subplot (1,2,2);
plot(1:iters, J_hist, '-b');
xlabel('no: of iteration');
ylabel('Cost function');
computeCost.m 看起来像,
function J = computeCost(x,y,theta)
m = length(y);
h = x * theta;
J = (1/(2*m))*sum((h-y) .^ 2);
endfunction
和gradientDescent.m看起来像,
function [theta, J_hist] = gradientDescent(x,y,theta,alpha,iters)
m = length(y);
J_hist = zeros(iters,1);
for i=1:iters
diff = (x*theta - y);
theta = theta - (alpha * (1/(m))) * (x' * diff);
J_hist(i) = computeCost(x,y,theta);
endfor
endfunction
绘制的图表看起来像这样,
虽然我的 Cost function 似乎被最小化了,但你可以看到,感觉不对。
有人可以告诉我这是否正确吗?如果不是,我做错了什么?
检查您的实施是否正确的最简单方法是与经过验证的线性回归实施进行比较。我建议使用另一种实施方法,例如 here 建议的方法,然后比较您的结果。如果拟合匹配,那么这是对您的数据的最佳线性拟合,如果它们不匹配,那么您的实现可能有问题。
我试图在 Octave 5.1.0 中对一个将 GRE 分数与录取概率相关联的数据集实施线性回归。 数据集是这样的,
337 0.92
324 0.76
316 0.72
322 0.8
.
.
.
我的主要 Program.m 文件看起来像,
% read the data
data = load('Admission_Predict.txt');
% initiate variables
x = data(:,1);
y = data(:,2);
m = length(y);
theta = zeros(2,1);
alpha = 0.01;
iters = 1500;
J_hist = zeros(iters,1);
% plot data
subplot(1,2,1);
plot(x,y,'rx','MarkerSize', 10);
title('training data');
% compute cost function
x = [ones(m,1), (data(:,1) ./ 300)]; % feature scaling
J = computeCost(x,y,theta);
% run gradient descent
[theta, J_hist] = gradientDescent(x,y,theta,alpha,iters);
hold on;
subplot(1,2,1);
plot((x(:,2) .* 300), (x*theta),'-');
xlabel('GRE score');
ylabel('Probability');
hold off;
subplot (1,2,2);
plot(1:iters, J_hist, '-b');
xlabel('no: of iteration');
ylabel('Cost function');
computeCost.m 看起来像,
function J = computeCost(x,y,theta)
m = length(y);
h = x * theta;
J = (1/(2*m))*sum((h-y) .^ 2);
endfunction
和gradientDescent.m看起来像,
function [theta, J_hist] = gradientDescent(x,y,theta,alpha,iters)
m = length(y);
J_hist = zeros(iters,1);
for i=1:iters
diff = (x*theta - y);
theta = theta - (alpha * (1/(m))) * (x' * diff);
J_hist(i) = computeCost(x,y,theta);
endfor
endfunction
绘制的图表看起来像这样,
虽然我的 Cost function 似乎被最小化了,但你可以看到,感觉不对。
有人可以告诉我这是否正确吗?如果不是,我做错了什么?
检查您的实施是否正确的最简单方法是与经过验证的线性回归实施进行比较。我建议使用另一种实施方法,例如 here 建议的方法,然后比较您的结果。如果拟合匹配,那么这是对您的数据的最佳线性拟合,如果它们不匹配,那么您的实现可能有问题。