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()