机器学习第一篇
机器学习的编程作业——optional exercise: visualizing the data
题目
建立学习模型来预测学生是否能被录取。训练集中给出了100位学生的第一次考试成绩、第二次考试成绩和是否被录取(100X3矩阵),目前需要绘制训练集数据对应的散点图。
我的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | function plotData(X, y) figure ; hold on; re = [X,y]; re1 = zeros (100,3); re2 = zeros (100,3); for i = 1: length (y) if re( i ,3) == 1 re1( i ,:) = re( i ,:); else re2( i ,:) = re( i ,:); end end all (re1,2) re1( all (re1==0,2),:)=[]; re2( all (re2==0,2),:)=[]; scatter (re1(:,1),re1(:,2), 'k+' , 'linewidth' ,2) scatter (re2(:,1),re2(:,2), 'ko' , 'MarkerFaceColor' , 'y' ) hold off; end |
这段代码中比较值得注意的就是剔除掉矩阵中全零行。
先介绍两个函数:
- all函数:检测矩阵中是否全为非零元素,如果是则返回1,否则返回0。
- any函数:检测矩阵中是否有非零元素,如果是则返回1,否则返回0。
1 2 3 | all (A) all (A,1) %与all(A)是等价的,返回的是一个行向量。代表每一列是否全零。 all (A,2) %返回的是一个列向量,代表每一行是否是全零 |
剔除全零行则只需要将返回列向量中值为0的行设置为空向量即可。
1 | A( all (A==0,2),:)=[]; |
我自己写的这个代码不得不说真的很丑。
参考答案上的代码
1 2 3 | pos = find (y==1); neg = find (y==0); plot (X(pos,1),X(pos,2), 'k+' , 'LineWidth' ,2, 'MarkerSize' ,7); plot (X(neg,1),X(neg,2), 'ko' , 'MarkerFaceColor' , 'y' , 'MarkerSize' ,7); |
关于find函数
1 2 3 4 5 | k = find (X) %返回一个包含X中每个非零元素的线性索引的向量。如果X是向量,则返回方向与X相同的向量。如果X为多维函数则返回由结果的线性索引组成的列向量。 k = find (~X) %返回的就是X中零元素的线性索引了。 k = find (X,n, 'first' ) %返回X中前n个非零元素的线性索引,一般情况可以默认不写'first' k = find (X,n, 'last' ) %返回X中后n个非零元素的线性索引 k = find (X<10) %按条件查找,返回满足条件元素的索引值 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现