机器学习无监督算法

无监督学习是机器学习中的一种方法,它主要用于从无标签数据中发现隐藏的模式和结构。

1、聚类算法

是一种无监督学习算法,用于将数据划分为不同的簇(聚类),相似的数据点被分配到同一个簇中。

(1)K-means算法:

知识点总结:
1)根据用户指定的簇数量K,选择随机的K个样本作为初始聚类中心。
2)通过计算每个样本与聚类中心的距离,将样本分配给最近的簇。
3)根据簇内样本的均值更新聚类中心,重复以上步骤直到聚类中心不再变化或达到最大迭代次数。

代码示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

np.random.seed(0)
X = np.random.rand(50,2)

kmeans = KMeans(n_clusters=3, random_state=0).fit(X)

colors = ['r', 'g', 'b']
markers = ['o', 's', 'D']
for i, (x,y) in enumerate(X):
    plt.scatter(x, y, color=colors[kmeans.labels_[i]], marker=markers[kmeans.labels_[i]])
plt.show()

运行结果:

(2) DBSCAN算法

 知识点总结:
1)定义一个半径r和邻居数目minPts来区分核心点、边界点和噪声点。
2)通过计算每个样本与其邻域内样本的密度来判断样本是否为核心点。
3)将核心点连接到密度可达的样本,形成一个簇,并将边界点分配给相应的簇。
4) 重复以上步骤直到所有样本都被访问过。

代码示例:

import numpy as np
from sklearn.cluster import DBSCAN

# 创建一些随机数据
X = np.random.rand(100, 2)

# 创建DBSCAN对象并拟合数据
dbscan = DBSCAN(eps=0.3, min_samples=5)
dbscan.fit(X)

# 打印每个数据点的簇标签
print(dbscan.labels_)

运行结果:

(3)层次聚类算法

 知识点总结:
1)将每个样本看作一个初始簇。
2) 通过计算不同簇之间的距离(如最短距离、最长距离、平均距离等)合并相似的簇,形成新的簇。
3)不断合并最相似的簇,直到所有样本都被合并到一个簇中或达到预设的簇数量。

代码示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import load_iris

# 加载数据集
iris = load_iris()
X = iris.data

# 设置层次聚类器
agg_clustering = AgglomerativeClustering(n_clusters=3, linkage='ward')

# 使用层次聚类器进行聚类
agg_clustering.fit(X)

# 绘制聚类结果图像
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, projection='3d')

colors = np.array(['r', 'g', 'b'])
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=colors[agg_clustering.labels_], s=60)

ax.set_xlabel('Sepal length')
ax.set_ylabel('Sepal width')
ax.set_zlabel('Petal length')

plt.show()

运行结果:

2. 关联规则学习(Association Rule Learning)

 (1)Apriori算法

用于挖掘频繁项集和关联规则。通过迭代生成候选项集,并使用支持度和置信度来筛选频繁项集和关联规则。

支持度:是某个项集在所有数据项中出现的频率。

它可以形式化地表示为:

其中freq(X)表示包含X的记录数,|D|表示数据集D中记录的总数。

例如,假设有100个订单数据中有30个订单包含了牛奶和面包,那么牛奶和面包的支持度就是30%。

支持度常用于挖掘频繁项集,即根据一定支持度阈值筛选出出现频率高的项集,来寻找其中的规律或关联。因此,支持度越高,代表该项集出现的频率越高,其对于关联规则挖掘的重要性也就越大。

置信度(Confidence):是指数据集D中包含项集X 的记录中同时包含另一个项集Y的比例。

它可以形式化地表示为:

其中Supp(X∪Y)表示包含项集X和Y的记录数,Supp(X)表示包含项集X的记录数。

例如,假设有100个订单数据中有70个订单购买了牛奶,其中有60个订单同时购买了面包,那么购买了牛奶的订单同时购买了面包的置信度就是60÷70=85.7%。

置信度常用于挖掘关联规则,即在前提条件成立的情况下,探索结论的概率,以此来推断出它们之间的关系。因此,置信度越高,代表前提条件成立的情况下结论成立的概率越高,其对于关联规则挖掘的重要性也就越大。


 代码示例:

from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
import pandas as pd

# 准备数据集
dataset = [['A', 'B', 'C'], ['B', 'D'], ['B', 'E'], ['A', 'B', 'C', 'E'], ['B', 'D']]
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)

# 计算频繁项集
frequent_itemsets = apriori(df, min_support=0.6, use_colnames=True)

# 计算关联规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.8)

print(frequent_itemsets)
print(rules)

结果:

   support  itemsets
0      0.6       (B)
1      0.6   (A, B)
2      0.6   (B,C)
3      0.6   (B, E)

  antecedents consequents  antecedent support  consequent support  support  \
0        (A)        (B)                 0.4                 0.6      0.4   
1        (C)        (B)                 0.6                 0.6      0.6   
2        (E)        (B)                 0.4                 0.6      0.4   

   confidence      lift  leverage  conviction  
0    1.000000  1.666667      0.16         inf  
1    1.000000  1.666667      0.24         inf  
2    1.000000  1.666667      0.16         inf 

支持度和置信度的值越高,代表其对于关联规则挖掘的贡献越大,对于数据分析和决策制定也有更大的指导意义。

3. 降维算法(Dimensionality Reduction Algorithms)

(1)主成分分析(PCA)

主成分分析(PCA)是一种常见的数据降维方法,通过将高维数据映射到低维空间中,保留尽可能多的信息和方差,从而提高计算效率和模型性能。其主要思想是将原始数据转化为新的正交坐标系,使得数据在新坐标系下的方差最大,同时不同主成分之间相互独立,可以有效地减少冗余信息和噪声。

PCA的具体实现步骤如下:

1)对原始数据进行标准化处理,使得各维度数据具有相同的尺度和权重。

2)计算数据集的协方差矩阵C,其中第i行和第j列的元素表示第i个特征和第j个特征之间的协方差。

3)对协方差矩阵C进行特征值和特征向量分解,得到对应的特征值和特征向量。特征值表示数据在对应方向上的方差大小,而特征向量表示数据在对应方向上的投影系数。

4)将特征向量按照对应的特征值大小进行排序,选取前k个特征向量作为新的主成分,构成对应的转换矩阵W。

5)将原始数据乘以转换矩阵W,得到新的低维数据表示。

代码示例:

import numpy as np
from sklearn.decomposition import PCA

# 创建一个示例数据集
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 使用PCA库实现主成分分析
pca = PCA(n_components=2)
pca.fit(X)

# 输出主成分分析后的结果
print("主成分分析后的结果:")
print(pca.transform(X))


   运行结果:

主成分分析后的结果:
[[-5.19615242e+00 -1.33226763e-15]
 [ 0.00000000e+00  0.00000000e+00]
 [ 5.19615242e+00  1.33226763e-15]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值