【22-23 春学期】AI作业4-无监督学习

1.K均值聚类  

k均值聚类是常见的无监督学习算法,可以将数据集分成k个不同的组或聚类。算法可以最小化组内平方误差之和。

        1.初始化聚类的质心

        2.将每个待聚类数据放入唯一一个聚类集合,计算数据和质心之间的欧氏距离,将数据放入距离最近质心的集合

        3.根据聚类结果,更新聚类质心

        4.算法循环迭代,直到满足条件

2.KNN  VS.  K-means

KNN和K-means相似点是都给了一个指定的点,在数据集中找离它最近的点

KNN是一种监督学习分类算法,没有明显的早期训练过程,算法中的K是样本x分类,x附近找离最近的K个点。

K-means是一种非监督学习聚类算法,有明显的早期训练过程,算法中K的是由人工固定好的数字,假设数据集合可以分为K个簇

3.主成分分析(PCA)

一种无监督算法,用于降维、特征提取、数据压缩等

通过分析找到数据特征的主要成分,使用这些主要成分代替原始数据。

降维后的结果保持原始数据的原有结构

4.LDA VS. PCA

LDA线性判别分析是一种监督学习算法,主要是将数据投影到一个低维的空间,同时还能最大程度的保留类别之间的差异。可以让映射后的样本有最好的分类性能。

PCA主成分分析则是让映射后的样本有最大的发散性

5.奇异值分解(SVD)

奇异值分解是将一个复杂变换分解为三个简单变换的矩阵分解技术

奇异值能够代表这个矩阵的信息

6.特征人脸方法(Eigenface)

特征人脸方法有三个步骤:

        ·用主成分分析实现人脸图像降维

        ·用奇异值分解实现主成分分析,简化运算

        ·把人脸从像素空间变换到另一个空间,在另一个空间中做相似性计算

7.潜在语义分析 (LSA)

LSA是一种无监督学习技术,用于文本的话题分析

可以通过矩阵分解发现文本与单词之间的基于话题的语义关系

相比于传统的以单词向量处理的文本信息处理方法,潜在语义分析都是以话题向量做处理,可以更准确地表示文本之间的语义相似度

8.期望最大化算法(EM)

期望最大化算法是一种常见的统计学习算法,用于求解含有隐变量的概率模型参数的最大似然估计。

EM算法可以看作是一种迭代优化算法,其优点在于可以有效地处理含有隐变量的复杂模型,并且不需要对隐变量的取值进行穷举搜索,从而大大提高了算法的计算效率。
 

9.K-means是最简单的EM算法?

K-means是一种基于EM算法的聚类算法,但并不是最简单的EM算法

10.编程实现EM算法

import numpy as np

# 定义高斯混合模型的 EM 算法
def em_algorithm(data, num_clusters, max_iterations):
    num_samples, num_features = data.shape

    # 初始化混合模型参数
    means = np.random.randn(num_clusters, num_features)
    covariances = [np.eye(num_features) for _ in range(num_clusters)]
    weights = np.ones(num_clusters) / num_clusters

    # 迭代优化
    for iteration in range(max_iterations):
        # E 步骤:计算每个样本属于每个簇的概率
        responsibilities = np.zeros((num_samples, num_clusters))
        for i in range(num_samples):
            for j in range(num_clusters):
                responsibilities[i, j] = weights[j] * multivariate_normal(data[i], means[j], covariances[j])
            responsibilities[i] /= np.sum(responsibilities[i])

        # M 步骤:更新模型参数
        for j in range(num_clusters):
            N = np.sum(responsibilities[:, j])
            means[j] = np.sum(responsibilities[:, j].reshape(-1, 1) * data, axis=0) / N
            covariances[j] = np.dot((responsibilities[:, j].reshape(-1, 1) * (data - means[j])).T, (data - means[j])) / N
            weights[j] = N / num_samples

    return means, covariances, weights

# 多元高斯分布的概率密度函数
def multivariate_normal(x, mean, covariance):
    d = len(x)
    exponent = -0.5 * np.dot(np.dot((x - mean).T, np.linalg.inv(covariance)), (x - mean))
    coefficient = 1.0 / (np.power((2 * np.pi), d / 2) * np.sqrt(np.linalg.det(covariance)))
    return coefficient * np.exp(exponent)

# 示例数据
data = np.array([[1.5, 1.7], [1.3, 1.9], [0.8, 2.2], [1.2, 2.0]])

# 运行 EM 算法
num_clusters = 2
max_iterations = 100
means, covariances, weights = em_algorithm(data, num_clusters, max_iterations)

print("Means:")
print(means)
print("Covariances:")
print(covariances)
print("Weights:")
print(weights)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值