机器学习第一篇
机器学习的编程作业——optional exercise: visualizing the data
题目
建立学习模型来预测学生是否能被录取。训练集中给出了100位学生的第一次考试成绩、第二次考试成绩和是否被录取(100X3矩阵),目前需要绘制训练集数据对应的散点图。
我的代码
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。
all(A) all(A,1)%与all(A)是等价的,返回的是一个行向量。代表每一列是否全零。 all(A,2)%返回的是一个列向量,代表每一行是否是全零
剔除全零行则只需要将返回列向量中值为0的行设置为空向量即可。
A(all(A==0,2),:)=[];
我自己写的这个代码不得不说真的很丑。
参考答案上的代码
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函数
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)%按条件查找,返回满足条件元素的索引值

浙公网安备 33010602011771号