博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习编程01_线性回归
阅读量:6280 次
发布时间:2019-06-22

本文共 2898 字,大约阅读时间需要 9 分钟。

machine-learning-01 线性回归模拟


跟随吴恩达老师学习机器学习,利用Octave开源软件,快速实现模型建立与函数实现,开启了我在机器学习领域的大门。今天是机器学习的第一个编程作业——线性回归。希望和大家一起学习,共同进步。

I.Simple Octave function:返回5*5的矩阵

1.下载好ex1文件并load到Octave中

1342687-20190115141045000-678917446.png

2.编写warmUpExercise.m文件

function A = warmUpExercise()%WARMUPEXERCISE Example function in octave%   A = WARMUPEXERCISE() is an example function that returns the 5x5 %  identity matrixA = eye(5);% ============= YOUR CODE HERE ==============% Instructions: Return the 5x5 identity matrix %               In octave, we return values by defining which variables%               represent the return values (at the top of the file)%               and then set them accordingly. % ===========================================end

3.在Octave中运行warmwarmUpExercise函数

1342687-20190115141135405-2010373469.png


II.Linear regression with one variable

单特征值的线性回归预测,ex1data1中包含了97组数据,每组有两个数据用“,”分割,一个为x变量,一个为y因变量。

1.将数据load到Octave中 & 编写plotData.m文件

data = load('ex1data1.txt'); % read comma separated dataX = data(:, 1); y = data(:, 2);m = length(y); % number of training examples
function plotData(x, y)plot(x, y, 'bx', 'MarkerSize', 10); % Plot the dataylabel('Profit in $10,000s'); % Set the y?axis labelxlabel('Population of City in 10,000s');end

2.运行poltData函数

1342687-20190115141357608-1043284781.png

3.Gradient Descent

1342687-20190115144629482-75005224.png

%初始值设定X = [ones(m, 1), data(:,1)]; % Add a column of ones to xtheta = zeros(2, 1); % initialize fitting parametersiterations = 1500;alpha = 0.01;
%computeCost函数编写function J = computeCost(X, y, theta)m = length(y); % number of training examplesJ = sum(power(X*theta-y,2)/(2*m));end

运行得到期望值32.07

1342687-20190115141644737-91164843.png

%计算theta_0,theta_1 & 编写gradientDescent函数%num_iters    --->   iterationsfunction [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)m = length(y); % number of training examplesJ_history = zeros(num_iters, 1);for iter = 1:num_iters    theta1=theta(1,1)-alpha/m*sum(X*theta-y);    theta2=theta(2,1)-alpha/m*sum((X*theta-y) .* X(:,2));    theta(1,1)=theta1;    theta(2,1)=theta2;J_history(iter) = computeCost(X, y, theta);endend

计算预测值

predict1 = [1, 3.5]theta;
predict2 = [1, 7]
theta;
1342687-20190115145718768-1123155813.png

4.通过gradientDescent求出的theta值画出拟合曲线

1342687-20190115145921019-339734920.png

1342687-20190115141423343-206442184.png


III.Visualizing->understand better gradientDescent function

将数据与回归直线的误差J转化为三维像小山一样的模型,我们通过梯度下降算法找到极小值点,利用等高线图像,在凹线中心的地方为最好的拟合点,更好的理解梯度下降算法的原理。

%初始化变量% Grid over which we will calculate Jtheta0_vals = linspace(-10, 10, 100);theta1_vals = linspace(-1, 4, 100);% initialize J_vals to a matrix of 0'sJ_vals = zeros(length(theta0_vals), length(theta1_vals));% Fill out J_valsfor i = 1:length(theta0_vals)    for j = 1:length(theta1_vals)      t = [theta0_vals(i); theta1_vals(j)];      J_vals(i,j) = computeCost(X, y, t);    endend
%3-d误差模型figure;surf(theta0_vals, theta1_vals, J_vals)

1342687-20190115141505123-1407510019.png

%误差等高线模型figurecontour(theta0_vals, theta1_vals, J_vals, logspace(-2, 3, 20)) %画20条等高线,每条等高线的值根据theta0,theta1,J,在10^(-2)和10^3依次对应一个值hold on;plot(theta(1), theta(2), 'rx', 'MarkerSize', 10, 'LineWidth', 2);

1342687-20190115141537586-244631425.png


笔者能力有限,哪里理解的不好请大家不要吝啬指出,不胜感激。

转载于:https://www.cnblogs.com/yichaoShare/p/10271534.html

你可能感兴趣的文章
印度迎来可再生能源产业大发展
查看>>
光伏制造业“融资难、融资贵”问题亟待破解
查看>>
Java Mail最基本的发送邮件例子
查看>>
《HTML 5与CSS 3 权威指南(第3版·上册)》——2.3 新增的属性和废除的属性
查看>>
《Total Commander:万能文件管理器》——第3.5节.选择文件
查看>>
《日志管理与分析权威指南》一导读
查看>>
去 TMD 互联网思维,性价比而已
查看>>
如何手动删除Oracle 11g数据库
查看>>
懒人促进社会进步 - 5种索引的原理和优化Case (btree,hash,gin,gist,brin)
查看>>
《深入实践Spring Boot》一3.4 视图设计
查看>>
《设计模式解析(第2版•修订版)》目录—导读
查看>>
《Web前端开发精品课 HTML与CSS进阶教程》——2.2 标题语义化
查看>>
Java核心技术卷I基础知识3.5.3 强制类型转换
查看>>
可与Mirai比肩的恶意程序Hajime,竟是为了保护IoT设备?
查看>>
《Spring Data 官方文档》6. Cassandra 存储库
查看>>
聊聊并发(十)生产者消费者模式
查看>>
R语言数据挖掘2.2.4.2 FP-growth算法
查看>>
人工智能概念诞生60年,哪些大牛堪称“一代宗师”?
查看>>
《游戏大师Chris Crawford谈互动叙事》一9.5 真实案例
查看>>
Mybatis与Spring整合连接MySQL
查看>>