Py学习  »  机器学习算法

机器学习笔记 DAY9

Peng_001 • 5 年前 • 434 次点击  

012 正规方程及不可逆性

  • 有些矩阵是不可逆的。即不存在 X*X**-1=I 。一般称这类不可逆矩阵为奇异或退化矩阵。
  • 一般方程的推导着实需要一定的矩阵基础。放弃了。。*。尝试以后再来学习。


  • 结论如上。

通过brew 安装octave

  • 由于反复报错,直接卸载了先。
 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
  • 再次安装
 /bin/bash -c "$(curl -fsSL --insecure https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  • 安装octave
brew update
brew install octave 
  • 启动octave
    终端直接输入 octave 即可

  • 使用octave

octave:1> 3*1
ans =  3
octave:2> 12/2
ans =  6
octave:3> 23+3
ans =  26

013 Octave 基本教程

Octave是一种很好的原始语言(prototyping language),使用Octave你能快速地实现你的算法。

  • 有些人会使用matlab学习机器学习。(ps: 其他还有Python、NumPy 和R)

  • 相比起这些,octave 是开源的(免费),而且作为高级语言,它也能实现机器学习中必要的算法。

  • 可以通过指令修改默认提示octave 界面

PS1('>> ')
# 修改为空字符。当然也可以使用其他的字符更改。
  • 可以通过";" 抑制打印输出
octave:12> a = 3
a =  3
octave:14> a =3;
# 此时就没有输出了

1. 简单数学运算

基本数学运算、逻辑运算

2. 矩阵

  • 生成矩阵的方法

通过分号分离矩阵元素建立

A = [1 2; 3 4; 5 6]
# 输出
A =

   1   2
   3   4
   5   6

列向量为

octave:36> C =[1;2;3]
C =

   1
   2
   3

行向量为

octave:35> B = [2 3 1]
B =

   2   3   1

通过指令构建矩阵

octave:37> a = ones(2,3)
# 建立 2x3 矩阵,且元素都为1
a =

   1   1   1
   1   1   1
octave:38> v = [1:2:10]
# 建立行向量,从1-10,且间隔为2
v =

   1   3   5   7   9
  • 使用rand 命令
octave:42> rand(2,2)
# 生成2x2 矩阵,元素在0-1 取值
ans =

   0.366373   0.258291
   0.030356   0.630887
  • 生成单位矩阵 eye
octave:46> eye(3)
ans =

Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1
  • 绘制直方图
hist(1,3)

014 在octave 中移动数据

  • 通过size()返回矩阵尺寸
octave:49> size(A)
# A为3x2 矩阵
ans =

   3   2

octave:50> A
A =

   1   2
   3   4
   5   6
octave:55> size(A,1)
# 返回矩阵的第一个元素(矩阵的行)。
# ps:矩阵的列为第二个元素。也即size(A,2) 会返回2
ans =  3
  • 在向量中使用length()返回长度。一般不在矩阵中使用。
octave:56> B = [1:6]
B =

   1   2   3   4   5   6

octave:57> length(B)
ans =  6
  • octave遵从一般linux/unix 指令
    如ls,cd,pwd等等。

  • 载入和保存文件

load(' ')
# 加载文件xxx
who
# 显示当前环境下变量
whos
# 显示当前环境下变量及其基本参数,attr, name, size, bytes, class
save XXX.xxx v
# 保存变量v到文件XXX中
save hello.txt v -ascii
# 将文件保存为ascii形式
  • 合并矩阵
C = [A B]
# 将矩阵B直接加在矩阵A的左边(需满足A、B矩阵行数相同)
C =[A;B]
# 将矩阵B直接加在矩阵A的下方(需满足A、B矩阵列数相同)

014 Octave 计算数据

  • 通过.x(运算符号)实现元素间的运算
    如 3X2 矩阵和 3X2矩阵直接相乘 A*B 会报错。但可以通过 A.*B 计算元素之间的运算(相同规格的矩阵)。
B =

   2   3
   4   5
   6   7
A =

   1   2
   3   4
   5   6
octave:88> A.*B
ans =

    2    6
   12   20
   30   42
  • 其他常用运算符号(对矩阵中元素的计算)
log(v)
# 对数
exp(v)
# 幂
v+1
# 元素均+1,也可以构造和v同规格矩阵,相加即可
  • 矩阵的转置
A =

   1   2
   3   4
   5   6

octave:98> A'
ans =

   1   3   5
   2   4   6
  • 一些有用的函数
[val, ind] =max(a)
# 将a矩阵中每列元素中最大值保存为1*n的矩阵存入val中(n为a矩阵列数)。
#并将最大值的索引(最大值所在的行数)存入ind并保存为1*n的矩阵。
a<3
# 遍历a中所有元素,满足返回1,否则为0
find(a<3)
# 返回满足条件的a中的元素的值
magic(3)
# 生成3X3的矩阵,并满足行列对角线加和数值均相等。
  • 求矩阵的逆
    若A与a为逆,则A*a = I(单位矩阵)
a = pinv(A)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/57149
 
434 次点击