1、PCA降维
PCA(主成分分析)是一种常用的数据降维技术,可以减少数据集的维度,同时尽可能保留原始数据的变异性。Python中,我们经常使用scikit-learn库来实现PCA降维。常用参数如下,
参数名 | 说明 |
n_components | 类型: 指定要保留的主成分数量。可以是具体数值、 保留的方差比例、 |
copy | 类型: 是否在运行算法前复制数据。 如果为 |
whiten | 类型: 是否对数据进行白化, 使输出的所有主成分具有相同的方差。 |
svd_solver | 类型: 默认值: 根据数据类型和 或指定求解器。 |
tol | 类型:
表示奇异值分解的容忍度。 |
iterated_power | 类型: 默认值: 随机SVD求解器的幂方法的迭代次数。 |
random_state | 类型: 默认值: 或 在某些 |
使用代码,
from sklearn.decomposition import PCA from sklearn.datasets import make_classification import matplotlib.pyplot as plt # 2. 生成一个高维数据集 X, y = make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=0, random_state=42) # 3. 应用PCA降维到2维 pca = PCA(n_components=2) X_pca = pca.fit_transform(X) # 4. 查看降维结果 plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y) plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') plt.title('PCA Result') plt.draw() plt.show()
2、K-means聚类
K-means是一种广泛使用的聚类算法,用于将数据分成多个类或群组,使得同一群组内的数据点相似度较高,而不同群组间的数据点相似度较低。Python中,我们经常使用scikit-learn库的KMeans类来实现。常用参数如下,
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
n_components | 整数 | None | 降维后的维数(要保留的成分数)。 默认情况下, 为类别数减一( n_classes - 1 )。 |
solver | 字符串 | 'svd' | 求解LDA的算法。 可选值: 'svd' , 'lsqr' , 'eigen' 。'svd' 不计算协方差矩阵,适用于高维数据。 |
shrinkage | 字符串 或浮点数 | None | 用于'lsqr' 和'eigen' 求解器的正则化参数。可以是 'auto' 或0到1之间的浮点数。 |
priors | 数组 | None | 类别的先验概率。形状为(n_classes,) 。如果未指定,则根据数据自动调整。 |
store_covariance | 布尔值 | False | 是否计算并存储类内协方差矩阵 或精度矩阵(如果使用了收缩)。 仅当 solver='lsqr' 或'eigen' 时可用。 |
tol | 浮点数 | 0.0001 | 奇异值分解的奇异值阈值, 用于秩估计。仅当 solver='svd' 时可用。 |
使用代码,
from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot as plt # 示例数据 X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) # 初始化KMeans kmeans = KMeans(n_clusters=3, random_state=0).fit(X) # 聚类中心点 centroids = kmeans.cluster_centers_ # 数据点的标签 labels = kmeans.labels_ # 可视化结果 plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis') plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=200, alpha=0.5) plt.draw() plt.show()
3、用户对物品类别的喜好细分案例
用户对物品类别的喜好细分案例中,可以结合使用PCA(主成分分析)和K-means聚类算法来分析用户对不同物品的喜好,并将用户细分成不同的群体。这种方法可以从高维数据中提取出重要的特征,并基于这些特征将用户分组,以便更好地理解不同用户群体的行为和偏好。
import numpy as np import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler # 随机生成一个示例数据集 # 若我们有150个用户,10种物品 np.random.seed(42) X = np.random.randint(1, 5, size=(150, 10)) # 数据标准化 X_std = StandardScaler().fit_transform(X) # 使用PCA进行降维,以便更好地进行聚类分析 pca = PCA(n_components=2) # 降至2维以便可视化 X_pca = pca.fit_transform(X_std) # 使用K-means进行聚类 k = 3 # 基于先前的分析决定将用户分为3个群体 kmeans = KMeans(n_clusters=k, random_state=42) y_kmeans = kmeans.fit_predict(X_pca) # 可视化聚类结果 plt.figure(figsize=(8, 6)) plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_kmeans, s=50, cmap='viridis') centers = kmeans.cluster_centers_ plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.5) plt.title("User Preference Clustering") plt.xlabel("PCA 1") plt.ylabel("PCA 2") plt.show()