机器学习week8 ex7 review

机器学习week8 ex7 review

这周学习K-means,并将其运用于图片压缩。


1 K-means clustering

先从二维的点开始,使用K-means进行分类。

1.1 Implement K-means


K-means步骤如上,在每次循环中,先对所有点更新分类,再更新每一类的中心坐标。

1.1.1 Finding closest centroids

对每个example,根据公式:

找到距离它最近的centroid,并标记。若有数个距离相同且均为最近,任取一个即可。
代码如下:

function idx = findClosestCentroids(X, centroids)
%FINDCLOSESTCENTROIDS computes the centroid memberships for every example
%   idx = FINDCLOSESTCENTROIDS (X, centroids) returns the closest centroids
%   in idx for a dataset X where each row is a single example. idx = m x 1
%   vector of centroid assignments (i.e. each entry in range [1..K])
%

% Set K
K = size(centroids, 1);

% You need to return the following variables correctly.
idx = zeros(size(X,1), 1);

% ====================== YOUR CODE HERE ======================
% Instructions: Go over every example, find its closest centroid, and store
%               the index inside idx at the appropriate location.
%               Concretely, idx(i) should contain the index of the centroid
%               closest to example i. Hence, it should be a value in the
%               range 1..K
%
% Note: You can use a for-loop over the examples to compute this.
%

for i = 1:size(X,1)
  dist = pdist([X(i,:);centroids])(:,1:K);
  [row, col] = find(dist == min(dist));
  idx(i) = col(1);
end;

1.1.2 Compute centroid means

对每个centroid,根据公式:

求出该类所有点的平均值(即中心点)进行更新。
代码如下:

function centroids = computeCentroids(X, idx, K)
%COMPUTECENTROIDS returns the new centroids by computing the means of the
%data points assigned to each centroid.
%   centroids = COMPUTECENTROIDS(X, idx, K) returns the new centroids by
%   computing the means of the data points assigned to each centroid. It is
%   given a dataset X where each row is a single data point, a vector
%   idx of centroid assignments (i.e. each entry in range [1..K]) for each
%   example, and K, the number of centroids. You should return a matrix
%   centroids, where each row of centroids is the mean of the data points
%   assigned to it.
%

% Useful variables
[m n] = size(X);

% You need to return the following variables correctly.
centroids = zeros(K, n);

% ====================== YOUR CODE HERE ======================
% Instructions: Go over every centroid and compute mean of all points that
%               belong to it. Concretely, the row vector centroids(i, :)
%               should contain the mean of the data points assigned to
%               centroid i.
%
% Note: You can use a for-loop over the centroids to compute this.
%

for i = 1:K
  centroids(i,:) = mean(X(find(idx == i),:));
end;

% =============================================================

end

1.2 K-means on example dataset

ex7.m中提供了一个例子,其中中 K 已经被手动初始化过了。

% Settings for running K-Means
K = 3;
max_iters = 10;

% For consistency, here we set centroids to specific values
% but in practice you want to generate them automatically, such as by
% settings them to be random examples (as can be seen in
% kMeansInitCentroids).
initial_centroids = [3 3; 6 2; 8 5];

如上,我们要把点分成三类,迭代次数为10次。三类的中心点初始化为.
得到如下图像。(中间的图像略去,只展示开始和完成时的图像)
这是初始图像:

进行10次迭代后的图像:

可以看到三堆点被很好地分成了三类。图片上同时也展示了中心点的移动轨迹。

1.3 Random initialization

ex7.m中为了方便检验结果正确性,给定了K的初始化。而实际应用中,我们需要随机初始化
完成如下代码:

function centroids = kMeansInitCentroids(X, K)
%KMEANSINITCENTROIDS This function initializes K centroids that are to be
%used in K-Means on the dataset X
%   centroids = KMEANSINITCENTROIDS(X, K) returns K initial centroids to be
%   used with the K-Means on the dataset X
%

% You should return this values correctly
centroids = zeros(K, size(X, 2));

% ====================== YOUR CODE HERE ======================
% Instructions: You should set centroids to randomly chosen examples from
%               the dataset X
%

% Initialize the centroids to be random examples
% Randomly reorder the indices of examples
randidx = randperm(size(X, 1));
% Take the first K examples as centroids
centroids = X(randidx(1:K), :);

% =============================================================

end

这样初始的中心点就是从X中随机选择的K个点。

1.4 Image compression with K-means

K-means进行图片压缩。
用一张的图片为例,采用RGB,总共需要个bit。
这里我们对他进行压缩,把所有颜色分成16类,以其centroid对应的颜色代替整个一类中的颜色,可以将空间压缩至 个bit。
用题目中提供的例子,效果大概如下:

1.5 (Ungraded)Use your own image

随便找一张本地图片,先用PS调整大小,最好在 以下(否则速度会很慢),运行,效果如下:


2 Principal component analysis

我们使用PCA来减少向量维数。

2.1 Example dataset

先对例子中的二维向量实现降低到一维。
绘制散点图如下:

2.2 Implementing PCA

首先需要计算数据的协方差矩阵(covariance matrix)
然后使用 Octave/MATLAB中的SVD函数计算特征向量(eigenvector)

可以先对数据进行normalizationfeature scaling的处理。
协方差矩阵如下计算:

然后用SVD函数求特征向量
故完成pca.m如下:

function [U, S] = pca(X)
%PCA Run principal component analysis on the dataset X
%   [U, S, X] = pca(X) computes eigenvectors of the covariance matrix of X
%   Returns the eigenvectors U, the eigenvalues (on diagonal) in S
%

% Useful values
[m, n] = size(X);

% You need to return the following variables correctly.
U = zeros(n);
S = zeros(n);

% ====================== YOUR CODE HERE ======================
% Instructions: You should first compute the covariance matrix. Then, you
%               should use the "svd" function to compute the eigenvectors
%               and eigenvalues of the covariance matrix.
%
% Note: When computing the covariance matrix, remember to divide by m (the
%       number of examples).
%

[U,S,V] = svd(1/m * X‘ * X);

% =========================================================================

end

把求出的特征向量绘制在图上:

2.3 Dimensionality reduction with PCA

将高维的examples投影到低维上。

2.3.1 Projecting the data onto the principal components

完成projectData.m如下:

function Z = projectData(X, U, K)
%PROJECTDATA Computes the reduced data representation when projecting only
%on to the top k eigenvectors
%   Z = projectData(X, U, K) computes the projection of
%   the normalized inputs X into the reduced dimensional space spanned by
%   the first K columns of U. It returns the projected examples in Z.
%

% You need to return the following variables correctly.
Z = zeros(size(X, 1), K);

% ====================== YOUR CODE HERE ======================
% Instructions: Compute the projection of the data using only the top K
%               eigenvectors in U (first K columns).
%               For the i-th example X(i,:), the projection on to the k-th
%               eigenvector is given as follows:
%                    x = X(i, :)‘;
%                    projection_k = x‘ * U(:, k);
%

Ureduce = U(:,1:K);
Z = X * Ureduce;

% =============================================================

end

X投影到K维空间上。

2.3.2 Reconstructing an approximation of the data

从投影过的低维恢复高维:

function X_rec = recoverData(Z, U, K)
%RECOVERDATA Recovers an approximation of the original data when using the
%projected data
%   X_rec = RECOVERDATA(Z, U, K) recovers an approximation the
%   original data that has been reduced to K dimensions. It returns the
%   approximate reconstruction in X_rec.
%

% You need to return the following variables correctly.
X_rec = zeros(size(Z, 1), size(U, 1));

% ====================== YOUR CODE HERE ======================
% Instructions: Compute the approximation of the data by projecting back
%               onto the original space using the top K eigenvectors in U.
%
%               For the i-th example Z(i,:), the (approximate)
%               recovered data for dimension j is given as follows:
%                    v = Z(i, :)‘;
%                    recovered_j = v‘ * U(j, 1:K)‘;
%
%               Notice that U(j, 1:K) is a row vector.
%               

Ureduce = U(:, 1:K);
X_rec = Z * Ureduce‘;

% =============================================================

end

2.3.3 Visualizing the projections


根据上图可以看出,恢复后的图只保留了其中一个特征向量上的信息,而垂直方向的信息丢失了。

2.4 Face image dataset

对人脸图片进行dimension reductionex7faces.mat中存有大量人脸的灰度图() , 因此每一个向量的维数是
如下是前一百张人脸图:

2.4.1 PCA on faces

用PCA得到其主成分,将其重新转化为 的矩阵后,对其可视化,如下:(只展示前36个)

2.4.2 Dimensionality reduction

取前100个特征向量进行投影,

可以看出,降低维度后,人脸部的大致框架还保留着,但是失去了一些细节。这给我们的启发是,当我们在用神经网络训练人脸识别时,有时候可以用这种方式来提高速度。

2.5 Optional (Ungraded) exercise: PCA for visualization

PCA常用于高维向量的可视化。
如下图,用K-means对三维空间上的点进行分类。

对图片进行旋转,可以看出这些点大致在一个平面上

因此我们使用PCA将其降低到二维,并观察散点图:

这样就更利于观察分类的情况了。

?

时间: 2024-11-06 07:38:14

机器学习week8 ex7 review的相关文章

机器学习week2 ex1 review

机器学习week2 ex1 review 这周的作业主要关于线性回归. 1. Linear regression with one variable 1.1 Plotting the Data 通过已有的城市人口和盈利的数据,来预测在一个新城市营业的收入.文件ex1data1.txt包含了以下数据: 第一列是城市人口数据,第二列是盈利金额(负数代表亏损). 可以首先通过绘图来直观感受.这里我们可以使用散点图(scatter plot ).通过 Octave/MATLAB 实现.数据存储在ex1d

机器学习week7 ex6 review

机器学习week7 ex6 review 这周使用支持向量机(supprot vector machine)来做一个简单的垃圾邮件分类. Support vector machine 1.1 Example dataset 1 ex6.m首先载入ex6data1.mat中的数据绘图: %% =============== Part 1: Loading and Visualizing Data ================ % We start the exercise by first l

机器学习week9 ex8 review

机器学习week9 ex8 review 这周学习异常监测, 第一部分完成对一个网络中故障的服务器的监测.第二部分使用协同过滤来实现一个电影推荐系统. 1 Anomaly Detection 监测服务器工作状态的指标:吞吐量(throughput).延迟(latency).我们有 的无标签数据集,这里认为其中绝大多数都是正常工作的服务器,其中少量是异常状态.先通过散点图来直观判断. 1.1 Gaussian distribution 对数据的分布情况选择一个模型.高斯分布的公式如下:其中 是平均

机器学习算法Review之分类

机器学习有着丰富的理论,分为有监督学习和无监督学习,有监督学习包括分类和回归,无监督学习包括聚类等.各种机器学习算法的基本思想都不难理解(这里的基本思想我的理解是各个算法的模型建立),而难点在于对于模型的求解,这里边有着优美的理论还有一些技巧,如SVM,EM,CART,AdaBoost,RF等.这些算法都是一些专家学者历经数年乃至十数年的研究成果,要想将它们都研究透彻确实是一项大工程,多数算法深入下去都是一本书,因此这里旨在从理解及应用的角度对这些经典的机器学习算法进行review. 分类 1)

Coursera公开课机器学习:Linear Algebra Review(选修)

这节主要是回顾了下线性代数的一些简单知识. 矩阵与向量 矩阵 由$m\times n$个数$a _{ij}(i=1,2,...,m;j=1,2,...,n)$排成的$m$行$n$列的数表,称为$m$行$n$列的矩阵,简称$m\times n$矩阵,记作: $$ \matrix{A}= \begin{bmatrix} a _{11} & a _{12} & \cdots & a _{1n} \cr a _{21} & a _{22} & \cdots & a

机器学习算法Review之回归

回归 1)多元线性回归 (1)模型建立 多元线性回归讨论的的是变量y与非随机变量x1--xm之间的关系,假设他们具有线性关系,于是有模型: y =b0 + b1x1 + -- + bmxm+ e 这里的e~N(0,a2),b0,--,bn,a2都是未知数.上式矩阵表达式为: y =xb + e 对于一组样本(x00--x0m,y0)--(xn0--xnm,yn)观测值,这时对每个观测值有: yi = b0 + b1xi1 + -- + bmxim+ ei   (i=0,--n) (2)模型求解

spark机器学习-第3章

1.安装工具ipython https://www.continuum.io/downloads 选择自己需要的版本 2.安装过程 (1)赋权限 chmod u+x ./Anaconda2-4.2.0-Linux-x86_64.sh (2)回车 [[email protected] tool]# ./Anaconda2-4.2.0-Linux-x86_64.sh Welcome to Anaconda2 4.2.0 (by Continuum Analytics, Inc.) In order

关于机器学习和深度学习的资料

声明:转来的,原文出处:http://blog.csdn.net/achaoluo007/article/details/43564321 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定期的更新,望看到文章的朋友能够学到更多. <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost 到随机森林.Deep Learning. &

机器学习入门资源--汇总

机器学习入门资源--汇总 基本概念 机器学习 机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科.机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法.机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法.因为学习算法中涉及了大量的统计学理论,机器学习与统计推断学联系尤为密切,也被称为统计学习理论.算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法. 下面从微观到宏观试着梳理一下机器学习的范畴: