无监督学习:聚类、降维与异常检测 ---代码示例

聚类

聚类是一种将数据集中的对象按照某种相似性度量标准划分成若干个组(或称为簇)的过程,使得同一个簇内的对象尽可能相似,不同簇之间的对象尽可能不同。K均值算法是其中最常用的一种聚类方法。

示例:使用K均值进行客户分群

假设有一个包含客户购买行为的数据集,想要根据这些行为将客户分为不同的群体。

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

# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)

# 创建并训练K均值模型
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)

# 获取聚类结果
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

# 可视化
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=200, alpha=0.75, marker='x')
plt.title('K-means Clustering')
plt.show()
  • make_blobs函数用来创建一个具有指定数量的中心点和样本数的数据集。
  • KMeans类用于执行K均值聚类。
  • fit方法训练模型,并找到最佳的簇中心。
  • labels_属性包含了每个样本所属的簇标签。
  • cluster_centers_属性给出了每个簇的中心位置。
降维

    降维技术主要用于减少数据集中特征的数量,同时尽量保留原始数据的重要信息。这不仅有助于提高计算效率,也便于数据可视化。主成分分析(PCA)是一种常用的线性降维方法。

示例:使用PCA对图像数据进行降维

假设有一组人脸图片数据,将使用PCA来降低特征维度,从而简化后续处理。

from sklearn.decomposition import PCA
from sklearn.datasets import fetch_lfw_people
import matplotlib.pyplot as plt

# 加载数据
lfw_dataset = fetch_lfw_people(min_faces_per_person=70, resize=0.4)
X, y = lfw_dataset.data, lfw_dataset.target

# 应用PCA降维
n_components = 150  # 设置降维后的特征数量
pca = PCA(n_components=n_components, svd_solver='randomized', whiten=True).fit(X)

# 转换数据
X_pca = pca.transform(X)

# 可视化部分主成分
fig, axes = plt.subplots(3, 8, figsize=(9, 4),
                         subplot_kw={'xticks':[], 'yticks':[]},
                         gridspec_kw=dict(hspace=0.1, wspace=0.1))
for i, ax in enumerate(axes.flat):
    ax.imshow(pca.components_[i].reshape(50, 37), cmap='bone')

plt.suptitle("Principal Components")
plt.show()
  • fetch_lfw_people函数加载LFW人脸数据库的一个子集。
  • PCA类初始化了一个PCA模型。
  • fit方法拟合PCA模型以确定主成分。
  • transform方法应用PCA变换,得到降维后的数据。
异常检测

异常检测用于识别那些显著不同于其他观察值的数据点。这对于检测欺诈交易、系统故障等场景非常有用。孤立森林(Isolation Forest)是一种有效的异常检测算法。

示例:使用Isolation Forest进行信用卡欺诈检测

假设有一个信用卡交易数据集,需要从中找出潜在的欺诈交易。

from sklearn.ensemble import IsolationForest
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 加载数据
data = pd.read_csv('creditcard.csv')  # 假设CSV文件中包含交易记录及其是否为欺诈的信息
X = data.drop(['Time', 'Amount', 'Class'], axis=1)  # 选择特征
y = data['Class']  # 欺诈标签

# 创建并训练Isolation Forest模型
iso_forest = IsolationForest(contamination=0.01, random_state=42)  # 设定污染比例为1%
iso_forest.fit(X)

# 预测异常
outliers = iso_forest.predict(X)
outliers[outliers == 1] = 0  # 正常
outliers[outliers == -1] = 1  # 异常

# 评估模型
print("Accuracy:", accuracy_score(y, outliers))
print(classification_report(y, outliers))

# 可视化结果
plt.figure(figsize=(10, 6))
plt.scatter(range(len(data)), data['V1'], c=outliers, cmap='coolwarm', s=10)
plt.title('Anomaly Detection with Isolation Forest')
plt.xlabel('Transaction Index')
plt.ylabel('Feature V1 Value')
plt.show()
  • IsolationForest类初始化了一个孤立森林模型。
  • contamination参数指定了数据集中预期的异常比例。
  • predict方法返回-1表示异常,1表示正常。
  • 我们通过对比实际标签和预测结果来评估模型性能。
  • 最后,通过散点图直观展示检测到的异常点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何遇mirror

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值