机器学习第一篇

机器学习的编程作业——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

这段代码中比较值得注意的就是剔除掉矩阵中全零行。

先介绍两个函数:

  1. all函数:检测矩阵中是否全为非零元素,如果是则返回1,否则返回0。
  2. 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)%按条件查找,返回满足条件元素的索引值

  

posted @   Emi-lia  阅读(37)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示