美文网首页互联网科技每天写1000字程序员
机器学习笔记034 | K-means 和 PCA 的代码实现

机器学习笔记034 | K-means 和 PCA 的代码实现

作者: 止一量化养家 | 来源:发表于2017-10-17 08:13 被阅读50次

1 K-means

首先看看迭代1次时聚类中心的位置:

再看看迭代10次后聚类中心的位置:

标记数据聚类中心:

# 给每一个数据样本标记其聚类中心
def findClosestCentroids(X, centroids):
    m = X.shape[0]
    K = centroids.shape[0]
    
    temp = np.zeros(m*K).reshape(K,m)
    # 遍历聚类中心,逐个计算与训练集之间的距离
    for i in range(K):
        # 求列值之和
        temp[i,:] = np.sum((X-centroids[i,:])**2,axis=1)
        
    # 找到距离最小所对应的行号
    idx = np.argmin(temp, axis=0)
    
    return idx

计算聚类均值,移动聚类中心:

# 计算聚类均值,移动聚类中心
def computeCentroids(X, idx, K):
    
    m,n = X.shape
    centroids = np.zeros(K*n).reshape(K,n)
    
    for i in range(K):
        # 求行值的平均值
        centroids[i,:] = np.mean(X[idx == i,:],axis=0)
    
    return centroids

如果初始化选择的位置不好,会出现局部最优解:

我们可以多次尝试随机初始化,然后选择最优结果:

# 随机初始化
def kMeansInitCentroids(X, K):
    
    centroids = np.zeros(K*X.shape[1]).reshape(K,X.shape[1])
    
    randidx = range(X.shape[0])
    # 随机打乱顺序
    random.shuffle(randidx)
    
    centroids = X[randidx[:K], :]
    
    return centroids

2 PCA

运行了PCA算法对数据进行特征维度压缩,然后进行反压缩,会产生数据丢失,正如图中蓝点与红点:

使用PCA进行降维,即使维度降低较多,差异性也能够得到很好的保留。

我们可以对比一下下面两个图片,它们的特征维度分别为1024和100:

原图片,特征维度:1024 反压缩后的图片,特征维度:100

特征的均值归一:

# 均值归一
def featureNormalize(X):
    mu = np.mean(X,axis=0)
    sigma = np.std(X,axis=0)
    X_norm = 1.0*(X - mu)/sigma
    return X_norm,mu,sigma

PCA计算过程:

# PCA计算
def pca(X):
    m,n = X.shape
    
    # 计算协方差
    C = 1.0/m*X.T.dot(X)
    
    # 特征值赋值给evalues,对应特征向量赋值给evectors
    evalues,evectors = np.linalg.eig(C) 
    
    # 特征值从大到小排列,返回数组索引
    sorted_indices = np.argsort(-evalues)
    
    
    # 特征向量按特征值大小从左到右排列
    sorted_evectors = evectors[:,sorted_indices]
    sorted_evalues = evalues[sorted_indices]
    
    return sorted_evectors,diag(sorted_evalues),sorted_evalues

特征映射:

# 特征映射
def projectData(X, U, K):
    Z = X.dot(U[:,:K])

    return Z

数据反压缩:

# 数据反压缩
def recoverData(Z, U, K):
    X_rec = Z.dot(U[:,:K].T)
    return X_rec

文章转载自公众号:止一之路

相关文章

网友评论

    本文标题:机器学习笔记034 | K-means 和 PCA 的代码实现

    本文链接:https://www.haomeiwen.com/subject/tzozyxtx.html