1、K-means分类
1.1、执行K-means算法
K-means算法能够自动将相似的数据样本分为多个簇。
其算法的步骤如下:

% Initialize centroids
centroids = kMeansInitCentroids(X, K);
for iter = 1:iterations
% Cluster assignment step: Assign each data point to the
% closest centroid. idx(i) corresponds to cˆ(i), the index
% of the centroid assigned to example i
idx = findClosestCentroids(X, centroids);
% Move centroid step: Compute means based on centroid
% assignments
centroids = computeMeans(X, idx, K);
end

1.1.1、找到样本最近的中心点
对于每个样本i来说:

此处ci表示的是样本点xi距离最近簇中心的索引,uj指的是第j个簇中心的位置。
补充完整idx = findClosestCentroids(X, centroids)函数有:

function idx = findClosestCentroids(X, centroids)K = size(centroids, 1);idx = zeros(size(X,1), 1);%distance = zeros(1,K);
%for i = 1:size(X,1)
%    for j = 1:K
%        distance(j) = (X(i,:)-centroids(j,:))*(X(i,:)-centroids(j,:))';
%        [temp,idx(i,1)] = min(distance);
%    end
%enddistance = zeros(size(X,1),K);
for i=1:Kdistance(:,i)=sum((X - ones(size(X,1),1)*centroids(i,:)).*...(X - ones(size(X,1),1)*centroids(i,:)),2);
end
[temp,index] = min(distance');
idx = index';
end

运行程序有:

Closest centroids for the first 3 examples: 1 3 2
(the closest centroids should be 1, 3, 2 respectively)

1.1.2、计算簇中心平均值
对于每个新的簇中心,重新计算其坐标为:

完成函数centroids = computeCentroids(X, idx, K)有:

function centroids = computeCentroids(X, idx, K)% Useful variables
[m n] = size(X);% You need to return the following variables correctly.
centroids = zeros(K, n);for i = 1:Kindex = find(idx==i);for j = 1:size(index,1)newXi(j,:) = X(index(j),:);endcentroids(i, :) = mean(newXi,1);newXi = zeros(1,n);
end
end

运行程序有:

Centroids computed after initial finding of closest centroids: 2.428301 3.157924 5.813503 2.633656 7.119387 3.616684 the centroids should be[ 2.428301 3.157924 ][ 5.813503 2.633656 ][ 7.119387 3.616684 ]

1.2、样本数据集上的k-means算法
运行下列代码:

load('ex7data2.mat');
K = 3;
max_iters = 10;
initial_centroids = [3 3; 6 2; 8 5];
[centroids, idx] = runkMeans(X, initial_centroids, max_iters, true);











1.3、簇中心的随机初始化
在实际中,应该随机选择样本作为簇中心坐标,对簇中心进行初始化。
补充完整函数centroids = kMeansInitCentroids(X, K),有:

function centroids = kMeansInitCentroids(X, K)
centroids = zeros(K, size(X, 2));randidx = randperm(size(X,1));
centroids = X(randidx(1:K),:);end

改用随机初始化簇中心的方式执行k-means算法,执行下列代码:

clear
load('ex7data2.mat');K = 3;
max_iters = 10;
initial_centroids = kMeansInitCentroids(X, K);
[centroids, idx] = runkMeans(X, initial_centroids, max_iters, true);

得到的分类为:

1.4、使用K-means算法进行图像压缩
在本小节,将使用K-means算法进行图像压缩。在一个24位的彩色图像中,每个像素由3个8位不带符号整型构成,灰度变化范围为0-255,其分别代表RGB。该图像含有上千种颜色,本次需要将颜色压缩至16种。
为了进行压缩,需要存储该16种颜色的RGB值,并且图像中的每个像素需要存储其分类到16种颜色的索引。
1.4.1、像素的K-means算法
执行下列代码:

>> A = double(imread('bird_small.png'));
>> A = A / 255;
>> img_size = size(A);
>> X = reshape(A, img_size(1) * img_size(2), 3);
>> K = 16;
>> max_iters = 10;
>> initial_centroids = kMeansInitCentroids(X, K);
>> [centroids, idx] = runkMeans(X, initial_centroids, max_iters);

得到16个簇中心为:

下面对原图像进行压缩,其关键的一步即为根据将簇中心(即对应的16种颜色)映射到对应的点。

>> idx = findClosestCentroids(X, centroids);
>> X_recovered = centroids(idx,:);
>> X_recovered = reshape(X_recovered, img_size(1), img_size(2), 3);
>> subplot(1, 2, 1);
>> imagesc(A);
>> title('Original');
>> subplot(1, 2, 2);
>> imagesc(X_recovered);
>> title(sprintf('Compressed, with %d colors.', K));

吴恩达机器学习ex7:K-means分类相关推荐

  1. 3. 吴恩达机器学习课程-作业3-多分类和神经网络

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 3. ...

  2. 吴恩达机器学习 EX7 第二部分 主成分分析(PCA)

    2 主成分分析 主成分分析通过协方差矩阵提取数据的主要成分,如90%的成分,通常用户数据压缩和数据可视化(维度降低方便可视化) 2.1 导入模块和数据 该部分通过将二维数据压缩成一维数据演示主成分分析 ...

  3. 吴恩达机器学习ex7 python实现

    这个项目包含了K-means 和PCA(主成分分析) 1 Kmeans聚类 1.1 读取数据 import numpy as np import pandas as pd import matplot ...

  4. 吴恩达机器学习ex3多类别分类

    数据集ex3data1.mat包含了5000条手写数字的训练样本,每个训练样本是 20 * 20 的像素灰度的矩阵.每一个像素值用浮点数来表示对应位置的灰度值,并被展开成400维的向量.即矩阵X中每一 ...

  5. 吴恩达机器学习ex7:PCA降维

    主成分分析(principal component analysis, PCA). 1.样本 1.1.样本数据集 导入一个二维的数据集并显示,得到. >> load ('ex7data1. ...

  6. 【吴恩达机器学习】Week4 编程作业ex3——多分类任务和神经网络

    Multi-class Classification 1. 数据预处理和可视化 dispalyData.m function [h, display_array] = displayData(X, e ...

  7. 吴恩达机器学习作业Python实现(三):多类分类和前馈神经网络

    吴恩达机器学习系列作业目录 1 多类分类(多个logistic回归) 我们将扩展我们在练习2中写的logistic回归的实现,并将其应用于一对多的分类(不止两个类别). import numpy as ...

  8. 吴恩达机器学习之逻辑回归:逻辑回归的假说表示、判定边界、代价函数、简化的成本函数和梯度下降、高级悠哈、多类别分类之一对多(详细笔记,建议收藏,已有专栏)

    吴恩达机器学习栏目清单 专栏直达:https://blog.csdn.net/qq_35456045/category_9762715.html 文章目录 6.逻辑回归(Logistic Regres ...

  9. python分类预测降低准确率_python实现吴恩达机器学习练习3(多元分类器和神经网络)...

    Programming Exercise 3: Multi-class Classification and Neural Networks 吴恩达机器学习教程练习3,练习数据是5000个手写数字(0 ...

最新文章

  1. 再学 GDI+[25]: TGPPen - 宽度、颜色与线帽
  2. NFC Basics(基本NFC)——翻译自developer.android.com
  3. html5游戏指尖跟随,图片跟随手指滑动
  4. Ant Design Pro 开发上手
  5. 浅谈MaxCompute资源规划管理及评估
  6. c#获取对象的唯一标识_DDD领域驱动设计实战 - 创建实体身份标识的常用策略
  7. 收据找不到怎么退押金_押金收据单不见了,能退押金吗,合同上有写押金多少的 - 找法网免费法律咨询...
  8. vim ,vi总是卡死,终于找到原因了。
  9. linux删除系统日志文件,Linux不小心删除日志文件syslog的解决方法
  10. Eclipse切换IDE界面语言
  11. 观察者模式在制作披萨项目中的应用
  12. python工时计算_七兮网络-如何根据考勤数据自动计算出员工工作时间
  13. table表格表头添加斜线
  14. js 数据类型思维导图
  15. 微信小程序跳转公众号文章非web-view
  16. EXCEL多页打印保留表头
  17. SQL Server 2008中新增的变更数据捕获(CDC)和更改跟踪
  18. python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图
  19. week4 day3/4 常用模块
  20. 十进制的Sin函数图像数组

热门文章

  1. Python(2.7)-元组(tuple)
  2. 如何查看selenium的版本号
  3. oracle中的数据对象
  4. 各种排序方法的时间复杂度、空间复杂度和稳定性统计表
  5. 动态绑数据(GridView控件Header和ItemTemplate)
  6. gVim取消自动备份
  7. 推荐分享一个自定义绑定控件(附源码)
  8. shiro 与spring的集成
  9. js将数组中一个或多个字段相同的子元素中合并
  10. 点击按钮回到页面顶部或者某个高度时的问题,JQUERY