机器学习(1)-Octive语言
来源:互联网 发布:日本制造知乎 编辑:程序博客网 时间:2024/05/12 23:48
Octive语言
1、基本语法
(1)数学运算
>>5+5ans = 10>> 3-2ans = 1>> 2^6ans = 64
(2)逻辑运算
>> 11==2 %逻辑运算ans = 0>> 2==2ans = 1>> 1~=2 %不等于ans = 1>> xor(1,0) %异或
(3)变量
>> x = 7; %加分号可抑制自动打印>> x %不加则打印出结果x = 7>> x = pi;>> disp(sprintf('4 decimals: %0.4f', x)); %转为字符串,保留后4位小数4 decimals: 3.1416>> disp(sprintf('14 decimals: %0.14f', x)); %转为字符串,保留后14位小数14 decimals: 3.14159265358979format long %控制输出长短格式的快捷命令>> xx = 3.14159265358979>> format short>> xx = 3.1416
(4)向量&矩阵
>> v = [1 ; 2 ; 3]
v =
1
2
3
>> m = [1 : 0.1 : 1.4; %表示步幅为0.1的从1到1.4 2 : 0.1 : 2.4; 3 : 0.1 : 3.4] m =
1.0000 1.1000 1.2000 1.3000 1.4000
2.0000 2.1000 2.2000 2.3000 2.4000
3.0000 3.1000 3.2000 3.3000 3.4000
>> w = randn(2,3) %(高斯)随机生成2by3的矩阵w =
-0.63858 0.95909 -0.70297
-0.64368 0.28263 -0.32134
生成直方图
>>w = rand(10,9);>> hist(w) %生成直方图
生成单位矩阵
>>i = eye(3)i =Diagonal Matrix 1 0 0 0 1 0 0 0 1
2、移动数据
(1)size
>>A = [1 2; 3 4; 5 6]size(A) %返回A的尺寸,一个1*2的矩阵[m,n],表示m行n列,测试size(size(A))size(A,1) %返回矩阵的行数size(A,2) %返回矩阵的列数length(A) %返回矩阵的最大维度,此时返回3,但通常对向量执行length命令
(2)文件操作
>>pwd %%打印当前路径ans = F:\octave-4.2.1>>cd'目录' %进入某目录 如:>>cd 'intel'>>pwdans = C:\Users\ADMINI~1\intel>>ls %列出当前目录和文件load 文件名 %加载文件,注意文件编码文ANSI,不支持中文load('文件名') %以函数的形式如:load featuresX.datload priceY.dat
(3)查看删除变量
who %显示当先工作空间储存的变量whos %详细显示当先工作空间储存的变量clear x %删除变量clear %删除所有变量
(4)变量赋值
v = priceY(1:10); %将priceY变量的前10个元素存入v中
(5)保存到本地文件
save hello.mat v; %将变量v保存到文件中,以二进制形式load hello.mat; %读取文件sace hello.txt; %将变量v保存到文件中,以文本文件形式
(6)访问和更改矩阵行列和元素
A(3,2) %访问矩阵A的第3行第2列的元素A(2,:) %访问矩阵A的第2行的所有元素,结果也是一个矩阵A(:,2) %访问矩阵A的第2列的所有元素,结果也是一个矩阵A([1 3],:) %访问矩阵A的第1和3行的所有元素A(:,2) = [10 ; 11 ; 12] %给矩阵的第二列赋值则:a =1 103 115 12>> a = [a, [100;101;102]] %在矩阵a后面添加一列则:a = 1 10 100 3 11 101 5 12 102A(:) %将矩阵A的所有组成一列110100311101512102C = [A B] %将矩阵直接连在一起,A在左边,B在右边;或者写成 [A, B]C = [A; B] %将矩阵直接连在一起,A在上边,B在下边(;意味着换行)
3、数据计算
(1)矩阵乘法
A = [1 2; 3 4; 5 6]B = [11 12; 13 14; 15 16]C = [1 1; 2 2]A*CA^2 %矩阵的自身乘法(必须是方形矩阵)
(2)按元素计算
A .* B %按元素乘 %若B为标量,可以写成*A .^ 2 %每个元素二次方,不可以简写成 ^,因为^2表示自身相乘v = [1;2;3]1 ./ v %v中每个元素取倒数
(3) 元素单元操作
log(v) %对每个元素取自然对数exp(v) %每个元素作为e的指数的值abs(v) %对每个元素取绝对值-v %对每一位取相反数
(4)元素双元操作
>>v = [1 ; 2 ; 3];>>length(v)ans = 3ones(3,1)ans = 1 1 1>>v + ones(length(v), 1) %等于v + [1;1;1] 等价于v + 1; v .+ 1ans = 2 3 4
(5)矩阵的转置、翻转
A' %转置filpud(a) %上下翻转filplr(a) %左右翻转
(6)最大,最小,求和,乘积,取整
>> a = [1 15 2 0.5]>> val = max(a) %对于行矩阵,取矩阵中的最大元素的值val = 15>> [val,idx] = max(a) %把矩阵a中最大的元素赋值给val,得到索引idsval = 15idx = 2若不是行矩阵max(a) %得到每一列的最大值,返回矩阵max(a, b) %矩阵A、B相同位置的元素相比取大的一个(ab矩阵同大小)max(a,[],1) %求每一列的最大值max(a,[],2) %求每一行的最大值sum(a) %所有元素相加得到的值sum(a,1) %按列求和sum(a,2) %按行求和 prod(a) %同一列的元素相乘floor(a) %对所有元素向下取整ceil(a) %对所有元素向上取整
(7)元素逻辑运算
a < 3 %对矩阵每个元素计算逻辑结果,输出由0和1组成的同大小矩阵
(8)查找元素
find(a < 3) %返回行矩阵满足逻辑运算的的元素的索引[r,c] = find(A>=7) %r为满足条件的元素的行号,c为满足条件的元素的列号
(9)magic方法
A = magic(3) %生成行/列/对角 相加都等于同一值的3*3矩阵(并卵)
(10)求逆
pinv(A) %求逆,pinv(A)*A = eye(n)
4、绘制及可视化数据
(1)绘制函数
t = [0:0.01:0.98]; %定义横坐标y1 = sin(2*pi*4*t); %定义纵坐标plot(t, y1) %绘制二维图形,t为横坐标,y1为纵坐标
若把纵坐标改成y2 = cos(2*pi*4*t);plot(t, y2) %重新绘制图形,t为横坐标,y2为纵坐标
二维图被替换成了新的
此时若要同时显示两个,则
plot(t, y1) %先绘制出一个hold on %保持图像plot(t, y2, 'r') %绘制第二个,颜色为红
(2)给函数图添加标注
保持hold状态时,
xlabel('time') %x轴的标签ylabel('value') %y轴的标签legend('sin', 'cos') %给两个曲线添加标注title('my plot') %图的标题
(3)将图保存到本地
print -dpng 'myPlot.png' %将图保存到本地close %关闭图像
(4)将2个图像用2个窗口显示
figure(1) ;plot(t, y1);figure(2) ;plot(t, y2);
(5)将2个图像用1个窗口显示
subplot(1,2,1); %将窗口生成1*2的格子,接下来使用第1个格子,绘制出坐标系plot(t,y1);subplot(1,2,2) %将窗口生成1*2的格子,接下来使用第2个格子,绘制出坐标系plot(t,y2);clf %清除窗口里的所有图像
(6)改变坐标系范围
axis([0.5 1 -1 1]) %横坐标范围为0.5~1,纵坐标的范围为-1~1
(7)使用色块可视化矩阵
A = magic(5) %创建幻方imagesc(A) %使用色块绘制幻方imagesc(A), colorbar, colormap gray %使用色块绘制矩阵A, 添加色标,将颜色映射到灰色
6、流程控制与函数
(1)基本结构与语句
控制语句 控制条件, 循环体;end;
if else if判断语句
if 条件1,
%语句;
elseif 条件2,
%语句;
else
%语句;
end;
if v(1) ==1, disp('v(1)=1');elseif v(1)==2, disp('v(1)==2');else disp('other');end;
for循环
for i=行向量,
%循环体;
end;
while continue break 循环
while 条件,
%循环体;
if 条件 %可选语句
break; %或者continue;
end;
end;
i=1;while i<=5,v(i) = 100;i = i+1;end;i=1;while true, v(i) = 100; i = i+1; if i==6 break; end;end;
while continue break 循环
while 条件,
%循环体;
if 条件 %可选语句
break; %或者continue;
end; %这个end结束的是if语句
end; %这个end结束的是while
i=1;while i<=5,v(i) = 100;i = i+1;end;i=1;while true, v(i) = 100; i = i+1; if i==6 break; end;end;
(2)函数创建与使用
创建一个文件命名为函数名.m的函数文件
编写函数(用写字板即可)
切换到函数文件所在的目录,或者将函数文件所在路径加入到搜索路径
cd '函数文件所在目录'或者addpath('目录的路径')
在命令行执行函数
>>[y1,y2]=squareThisNumber(2,2)y1 = 4y2 = 8
举例:计算线性回归中的代价函数的值
文件:cosFunctionJ.m
内容:
function J = costFunctionJ(X, y, theta) %函数定义 % X为数据的矩阵 % y为class labels m = size(X,1); %获取训练的组数,就是X的行数 predictions = X*theta; %每一组训练数据的带入假设函数后的值 sqrErrors = (predictions-y).^2; %算出误差 J = 1/(2*m) * sum(sqrErrors); %带入公式
则:
>>X = [1 1; 1 2; 1 3];>>y = [1; 2; 3];>>theta = [0; 1];>>costFunctionJ(X,y,theta)j = 0
7、向量化
无论你是用Octave,还是别的语言,比如MATLAB,或者你正在用Python、NumPy或Java、C,C++。所有这些语言都具有,各种线性代数库,这些库文件都是内置的,容易阅读和获取。他们通常写得很好,已经经过高度优化,通常是数值计算方面的博士,或者专业人士开发的。而当你实现机器学习算法时,如果你能,好好利用这些,线性代数库或者说,数值线性代数库,并联合调用它们。而不是自己去做函数库可以做的事情。你会发现这样更有效,运行速度更快。
(1)例子1
对于假设函数
可转化为
其中:
- θ为元素为θ0到θn的列向量
- x为元素为x0到xn的列向量
prediction = theta' * X
(2)例子2
对于梯度下降算法中的公式
重复直到收敛{
(同时更新对于每一个j =0,…,n)
}
可以转化为
其中:
- θ 表示 n+1 维度的列向量
- α 表示一个标量
- δ 表示一个n+1维度的列向量;推导、定义如下
第一步:
其中:
- Errors 为一个m维的列向量=
- X即其他见例子和正规方程
- func 是一个操作:Errors的每一元素(从1到m号)乘以X每一行(从1到m行)的每一个元素(从1到n+1列)得到一个矩阵,再转置,按照行求和,得到一个n+1维度的列向量
编程实现:
Errors = X*theta - y;% delta = (1/m)*(sum(Errors .* X)'); %此方法为以上分析得,标准方法如下 delta = (1/m)*X'*Errors; theta = theta - alpha*delta;
- 机器学习(1)-Octive语言
- 《机器学习与R语言》读书笔记1:机器学习简介
- 机器学习语言理解
- R语言与机器学习-学习笔记1(前言)
- R语言之机器学习
- R语言中的机器学习
- 机器学习与R语言
- R语言实战:机器学习与数据分析源代码1
- 机器学习笔记之R语言基础篇1
- R语言与机器学习学习笔记
- 大数据(三十七)机器学习【机器学习语言】
- R语言中的机器学习包
- [转载]R语言中的机器学习(转)
- R语言中的机器学习包
- [转载]R语言中的机器学习(转)
- R语言中的机器学习包
- R语言中的机器学习包
- R语言中的机器学习包
- React组件生命周期详解
- 使用PDFBOX提取PDF文件
- RocketMQ单机部署及使用
- 集群消费和广播消费
- 387. First Unique Character in a String(C语言)
- 机器学习(1)-Octive语言
- openwrt uhttpd更改默认端口
- 学这么些年的编程 可曾后悔过
- 消息过滤
- SpringMvc中数据的格式化
- 自定义的圆角ImageView
- Visusl Studio——包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
- oracle 12c 新特性之(相同字段上的多重索引、ddl 日志、限制PGA的大小、分页查询)
- mybatis的CRUD操作