Stanford公开课机器学习---4.Matlab/Octave 快速教程

Basic Operations 基本操作

a =

    1.0000   15.0000    2.0000    0.5000
% ================format ================
>> format long
>> a

a =

   1.000000000000000  15.000000000000000   2.000000000000000   0.500000000000000
% ================fprintf ================
>> fprintf(‘%f %f \n‘,1, 2);
1.000000 2.000000
% ================ ================
>> v=1:0.1:2 % start;步长;end

v =

    1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000    1.9000    2.0000

>> v=1:6

v =

     1     2     3     4     5     6
% ================help ================
help
A=rand(3,2);
A=randn(3,2);
w = -6 + sqrt(10)*(randn(1,10000));
hist(w); %柱状图
eye();
ones();
zeros(1,3)

Moving Data Around 移动数据

% ================A ================
>> A=[1 2;3 4;5 6]
A =
    1     2
    3     4
    5     6
% ================ size ================
>>size(A) %返回矩阵维度:行数 列数
ans = 3 2
>>size(A,1) %返回矩阵维度:行数
ans = 3
>>size(A,2) %返回矩阵维度:列数
ans = 2

% ================ length================
>>v = [1 2 3 4] %返回矩阵维度:行数
v =
    1 2 3 4
>>length(v) %返回矩阵最大维度大小
ans = 4
>>length(A) %返回矩阵最大维度大小
ans = 3

% ================ ================
pwd %当前路径
ls %当前路径下的文件
cd %切换目录
% ================ load clear save data ================
data = load(‘ex1data2.txt‘);

who %当前工作空间的所有变量

whos %当前工作空间的所有变量的详细信息

clear variablename %删除变量
clear variable %删除当前工作空间的所有变量

>> save test.mat A
>> save testtext.txt A –ascii % save as text (ASCII)
% ================ 矩阵 Matrix================
>> A=[1 2;3 4;5 6]
A =
   1     2
   3     4
   5     6

>> A(3,2) %(行,列)

ans =

    6

>> A(2,:) %第二行

ans =

    3     4

>> A([1 3],:) %select the 1st and 3rd row

ans =

    1     2
    5     6

>> A(:,2)=[10,11,12]

A =

    1    10
    3    11
    5    12

>> A=[A,[101;102;103]]%append another column vector

A =

    1    10   101
    3    11   102
    5    12   103

>> A(:) %put all elements of A into a single vector

ans =

    1
    3
    5
   10
   11
   12
  101
  102
  103

B=[11,12;13,14;15,16]

B =

   11    12
   13    14
   15    16

>> C=[A B]

C =

    1    10   101   11    12
    3    11   102   13    14
    5    12   103   15    16

A=[1 2;3 4;5 6]

A =

    1     2
    3     4
    5     6

>> C=[A;B]

C =

    1     2
    3     4
    5     6
   11    12
   13    14
   15    16

Computing on Data 计算数据

% matlab默认 * / 是矩阵操作 .* ./是对每个元素操作
>>A
ans =
   1    2
   3    4
   5    6

>>A.*B %对应位置的数据相乘,即element product

ans =
   11    24
   39    56
   75    96

 >>A.^2 % 对应位置的数据的平方

ans =
   1    4
   9    16
   25   36

 >>1 ./A % 对应位置的数据的除法

ans =
   1.00000    0.50000
   0.33333    0.25000
   0.20000    0.16667

>>-A % -1 * A
ans =
    -1    -2
    -3    -4
    -5    -6

>>abs(A) % 绝对值

>> A + 1 % 或者 A + ones(3,2)

ans =
     2     3
     4     5
     6     7

>>A‘%转置
ans =
    1     3     5
    2     4     6

>> A<3 %小于3的元素对应位置为1(真),否则为0(假)

ans =
    1     1
    0     0
    0     0

>> find(A<3) % A中哪些元素小于3:第一个,第四个(从上到下数,列优先)

ans =

    1
    4

A =

    8     1     6
    3     5     7
    4     9     2

>> [r,c]=find(A>=6) %r是行  c是列 所以大于等于6的数的位置是 第一行第一列,第3行第2列。。。

r =
    1
    3
    1
    2

c =
    1
    2
    3
    3

>> a=[1 15 2 0.5]

a =
   1.0000   15.0000    2.0000   0.5000

>> [val,ind] = max(a) % val是a中最大的数的值,ind是这个值的位置

val =
    15

ind =
     2

>> sum(a)

ans =
  18.5000

>> sum(A) % 默认求每列的和,相当于sum(A,1)
% 1 — Default. Returns sum of elements in each column.
% 2 — sum(A,2)Returns sum of elements in each row.每行的和

ans =
     9    12

>> prod(a) %a中元素的乘积

ans =
   15

>> prod(A) %求每列的乘积,相当于prod(A,1)
% 1 — Default. Returns prod of elements in each column.
% 2 — prod(A,2)Returns prod of elements in each row.每行的乘积
ans =
    15    48 

>> floor(a) %取下界

ans =

    1    15     2    0

>> ceil(a)%取上界

ans =

    1    15     2    1

>> rand(3)%创建3*3的random矩阵,每个值在[0,1]之间

ans =
   0.6463    0.2760    0.1626
   0.7094    0.6797    0.1190
   0.7547    0.6551    0.4984

>> max(rand(3),rand(3)) %在两个random的3*3矩阵中找对应位置的max

ans =

   0.9597    0.2238    0.5060
   0.5472    0.7513    0.8143
   0.5853    0.8407    0.8909

>> A=magic(3)

A =
    8     1     6
    3     5     7
    4     9     2

>> max(A,[],1) %找每列最大值,1表示第一维,即列

ans =

    8     9     7

>> max(A,[],2) %找每行最大值,2表示第二维,即行

ans =

    8
    7
    9

>> max(A) %defaultis column max

ans =

    8     9     7

>> max(max(A)) %A中最大元素

ans =

    9

>> A(:)

ans =

    8
    3
    4
    1
    5
    9
    6
    7
    2

>> max(A(:))

ans =

    9

>> A=magic(9) % 行,列,对角线加起来的值相等的9*9矩阵

A =

   47    58    69   80     1    12   23    34    45
   57    68    79    9    11    22   33    44    46
   67    78     8   10    21    32   43    54    56
   77     7    18   20    31    42   53    55    66
    6    17    19   30    41    52   63    65    76
   16    27    29   40    51    62   64    75     5
   26    28    39   50    61    72   74     4    15
   36    38    49   60    71    73    3    14    25
   37    48    59   70    81     2   13    24    35

>> sum(A,1)%column sum

ans =

  369   369   369  369   369   369  369   369   369

>> sum(A,2)%sum each row

ans =

  369
  369
  369
  369
  369
  369
  369
  369
  369

>> eye(9)

ans =

    1     0     0    0     0     0    0     0     0
    0     1     0    0     0     0    0     0     0
    0     0     1    0     0     0    0     0     0
    0     0     0    1     0     0    0     0     0
    0     0     0    0     1     0    0     0     0
    0     0     0    0     0     1    0     0     0
    0     0     0    0     0     0    1     0     0
    0     0     0    0     0     0    0     1     0
    0     0     0    0     0     0    0     0     1

>> A.*eye(9)%takethe element product of the 2 matrix

ans =

   47     0     0    0     0     0    0     0     0
    0    68     0    0     0     0    0     0     0
    0     0     8    0     0     0    0     0     0
    0     0    0    20     0    0     0     0    0
    0     0     0    0    41     0    0     0     0
    0     0     0    0     0    62    0     0     0
    0     0     0    0     0     0   74     0     0
    0     0     0    0     0     0    0    14     0
    0     0     0    0     0     0    0     0    35

>> sum(sum(A.*eye(9))) %sum(sum(A.*flipud(eye(9))))  

ans =
  369

>> flipud(A) %returns X with the order of elements flipped upside down along the first dimension. 列数据颠倒,第一行的到最后一行,第二行到倒数第二行,以此类推

ans =
     5     6
     3     4
     1     2 

>> A=magic(3)

A =

    8     1     6
    3     5     7
    4     9     2

>> temp=pinv(A) %矩阵求逆 伪逆矩阵

temp =

   0.1472   -0.1444    0.0639
  -0.0611    0.0222    0.1056
  -0.0194    0.1889   -0.1028

>> temp*A

ans =

   1.0000   -0.0000   -0.0000
  -0.0000    1.0000    0.0000
   0.0000    0.0000    1.0000

Plotting Data 绘图数据

>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);
>> plot(t,y1)

>> hold on;%plot new figure on the old ones
>> y2=cos(2*pi*4*t);
>> plot(t,y2,‘r‘)

>> xlabel(‘time‘) %x坐标标签
>> ylabel(‘value‘) %y坐标标签
>> legend(‘sin‘,‘cos‘) %图例
>> title(‘my plot‘)
>> print -dpng ‘myplot.png‘ %save as a file in default catalog
>> cd ‘C:\Users\x\Desktop‘; print -dpng ‘myplot.png‘ % 保存到相应的路径
>> close %关闭图片

%分别显示两幅图像
>> figure(1);plot(t,y1);
>> figure(2);plot(t,y2)

%一幅图中显示两个subplot figure
subplot(1,2,1); % Divides plot a 1* 2 grid, access fisrt element
plot(t,y1);
subplot(1,2,2);% Divides plot a 1* 2 grid, access second element
plot(t,y2);
axis([0.5 1 -1 1]) %改变正在编辑的图的x坐标范围为[0.5 1]y坐标范围为[-1 1]
clf % clear figure

>> A=magic(5)

A =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9
>> imagesc(A) %可视化矩阵
>> imagesc(A), colorbar
>> imagesc(A), colorbar, colormap gray; % 逗号运算符,多个命令运行

>> a=1;b=2;c=3; %多个命令运行,但不会输出
>> a=1,b=2,c=3 % 逗号运算符,多个命令运行,有输出

a =
     1

b =
     2

c =
     3


Control Statements: for, while, if statement 控制语句:for,while,if 语句

>> v = zeros(10,1)
v =
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0

>>  for i = 1:10,
        v(i) = 2^i;
    end;
>> v
v =
           2
           4
           8
          16
          32
          64
         128
         256
         512
        1024
% ================ ================
>> indices = 1:10;
>> indices
indices =
     1     2     3     4     5     6     7     8     9    10

>>  for i = indices,
        disp(i);
    end;
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
% ================ ================
>>  i = 1;
>>  while i <=5,
        v(i) = 100;
        i = i + 1;
    end;
>> v
v =
         100
         100
         100
         100
         100
          64
         128
         256
         512
        1024
% ================ ================
>>  i = 1;
>>  while true,
        v(i) = 999;
        i = i +1;
        if i == 6,
            break;
        end;
    end;
>> v
v =
         999
         999
         999
         999
         999
          64
         128
         256
         512
        1024
% ================ ================
>> v(1)
ans =
   999
>>  v(1) = 2;
>>  if v(1) == 1,
        disp(‘The value is one‘);
    elseif v(1) == 2,
        disp(‘The value is two‘);
    else
        disp(‘The value is not one or two‘);
    end;
The value is two
% ================ function 函数 ================
function [y1, y2] = squareAndCubeThisNumber(x)
y1 = x^2;
y2 = x^3;
end

[a, b] = squareAndCubeThisNumber(5);
>>b
b = 125
% ================代价函数方程 ================
function J = computeCostMulti(X, y, theta)
%COMPUTECOSTMULTI Compute cost for linear regression with multiple variables
%   J = COMPUTECOSTMULTI(X, y, theta) computes the cost of using theta as the
%   parameter for linear regression to fit the data points in X and y

% Initialize some useful values
m = length(y); % number of training examples

% You need to return the following variables correctly
J = 0;

% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta
%               You should set J to the cost.

J = sum((X * theta - y).^2)/(2*m);

% =========================================================================

end

Vectorization 向量化

下图右边的是用C++的库:

梯度下降

theta=theta?alpha/m?X′?(X?theta?y);


Normal Equation Noninvertibility 正规方程 不可逆性

不可逆性矩阵:奇异矩阵,退化矩阵

计算逆矩阵有两个函数:pinv 和inv

区别:

- 伪逆函数pinv可以计算出θ,即使 X’ * X 不可逆

不可逆的原因:

  • 特征之间不线性独立
  • 特征数量大于训练集的数量




时间: 2024-11-05 18:33:54

Stanford公开课机器学习---4.Matlab/Octave 快速教程的相关文章

Stanford公开课机器学习---1.Intrduction 机器学习介绍

文章是下面这个公开课的个人笔记,推荐的笔记里记的比较全,完全依据视频课程(有少量小错误),我的笔记依据课程按自己的理解记录一些重点,方便快速回顾.另外自己开始学这门课时搜到的好的资料,推荐给大家: |- Coursera上斯坦福大学Andrew Ng教授的"机器学习公开课" |-- 类 别:适合入门 |-- 网页地址: https://www.coursera.org/learn/machine-learning/outline |-- 学习笔记:推荐 @小小人_V 同学这门课程的学习

Stanford公开课机器学习---3.多变量线性回归 (Linear Regression with multiple variable)

3.多变量线性回归 (Linear Regression with multiple variable) 3.1 多维特征(Multiple Features) n 代表特征的数量 x(i)代表第 i 个训练实例,是特征矩阵中的第 i 行,是一个向量(vector). x(i)j代表特征矩阵中第 i 行的第 j 个特征,也就是第 i 个训练实例的第 j 个特征. 多维线性方程: hθ=θ0+θ1x+θ2x+...+θnx 这个公式中有 n+1 个参数和 n 个变量,为了使得公式能够简化一些,引入

Stanford公开课机器学习---2.单变量线性回归(Linear Regression with One Variable)

单变量线性回归(Linear Regression with One Variable) 2.1 模型表达(Model Representation) m 代表训练集中实例的数量 x 代表特征/输入变量 y 代表目标变量/输出变量 (x,y) 代表训练集中的实例 (x(i),y(i) ) 代表第 i 个观察实例 h 代表学习算法的解决方案或函数也称为假设(hypothesis) 单变量线性回归:只含有一个特征/输入变量 x hθ=θ0+θ1x 2.2 代价函数(Cost Function) 目标

Coursera公开课机器学习:Linear Regression with multiple variables

多特征 实际上我们真正买过房子的都知道,在选择房子的时候,需要考虑的不仅仅是面积,地段.结构.房龄.邻里关系之类的都应该是考虑对象,所以前面几讲谈论的,单纯用面积来谈房价,不免失之偏颇. 多考虑些特性 我们加入一些特性来考虑房价问题: 符号解释 $n$:特性数目 $x ^{(i)}$:输入的第$i$个训练数据 $x ^{(i)} _j$:第$i$个训练数据的第$j$个特性 $h _\theta (x)$ 相应的,$h _\theta (x)$也就变了: $h _\theta (x) = \the

Coursera公开课机器学习:Introduction

机器学习的定义 Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed. Tom Mitchell (1998) Well-posed Learning Problem: A computer program is said to learnfrom experience E with r

Coursera公开课机器学习:Linear Algebra Review(选修)

这节主要是回顾了下线性代数的一些简单知识. 矩阵与向量 矩阵 由$m\times n$个数$a _{ij}(i=1,2,...,m;j=1,2,...,n)$排成的$m$行$n$列的数表,称为$m$行$n$列的矩阵,简称$m\times n$矩阵,记作: $$ \matrix{A}= \begin{bmatrix} a _{11} & a _{12} & \cdots & a _{1n} \cr a _{21} & a _{22} & \cdots & a

斯坦福大学公开课机器学习:advice for applying machine learning - deciding what to try next(设计机器学习系统时,怎样确定最适合、最正确的方法)

假如我们在开发一个机器学习系统,想试着改进一个机器学习系统的性能,我们应该如何决定接下来应该选择哪条道路? 为了解释这一问题,以预测房价的学习例子.假如我们已经得到学习参数以后,要将我们的假设函数放到一组新的房屋样本上进行测试,这个时候我们会发现在预测房价时,产生了巨大的误差,现在我们的问题是要想改进这个算法接下来应该怎么办? 实际上我们可以想出很多种方法来改进算法的性能,其中一种办法是使用更多的训练样本.具体来讲,通过电话调查.上门调查,获取更多的不同的房屋出售数据.遗憾的是,好多人花费了大量

斯坦福大学公开课机器学习:machine learning system design | error metrics for skewed classes(偏斜类问题的定义以及针对偏斜类问题的评估度量值:查准率(precision)和召回率(recall))

上篇文章提到了误差分析以及设定误差度量值的重要性.那就是设定某个实数来评估学习算法并衡量它的表现.有了算法的评估和误差度量值,有一件重要的事情要注意,就是使用一个合适的误差度量值,有时会对学习算法造成非常微妙的影响.这类问题就是偏斜类(skewed classes)的问题.什么意思呢.以癌症分类为例,我们拥有内科病人的特征变量,并希望知道他们是否患有癌症,这就像恶性与良性肿瘤的分类问题.假设y=1表示患者患有癌症,假设y=0表示没有得癌症,然后训练逻辑回归模型.假设用测试集检验了这个分类模型,并

斯坦福大学公开课机器学习:Neural network-model representation(神经网络模型及神经单元的理解)

神经网络是在模仿大脑中的神经元或者神经网络时发明的.因此,要解释如何表示模型假设,我们先来看单个神经元在大脑中是什么样的.如下图,我们的大脑中充满了神经元,神经元是大脑中的细胞,其中有两点值得我们注意,一是神经元有细胞主体,二是神经元有一定数量的输入神经.这些输入神经叫做树突,可以把它们想象成输入电线,它们接收来自其他神经元的信息,神经元的输出神经叫做轴突,这些输出神经是用来给其他神经元传递信号或者传送信息的.简而言之,神经元是一个计算单元,它从输入神经接受一定数目的信息,并做一些计算,然后将结