无监督学习模型是识别无标签数据结构的模型。这里简单介绍几种的无监督学习算法。分别是主成分分析(PCA)、高斯混合模型、流形学习算法(Isomap)。
- 主成分分析(PCA)
这里使用鸢尾花数据集进行演示,将它降维到两个维度,然后再可视化。其实,降维的任务是要找到一个可以保留数据本质特征的低维矩阵来描述高维数据,理解数据中的主要方差,降维通常用于辅助数据可视化工作的。当然,PCA并不是一个队每个高维数据集都有效的算法,数据集中的异常点会影响PCA的效果。因为这个缺点,很多PCA变体被开发出来了,在sklearn.decomposition子模块中有两个方法:RandomizedPCA和SparsePCA。RandomizedPCA算法是使用了一个非确定方法,快速地近似计算一个维度非常高的数据的前几个主成分,而SparsePCA引入了一个正则项来保证成分的稀疏性。
from sklearn.decomposition import PCA
import seaborn as sns
iris = sns.load_dataset("iris")
# iris.head()
X_iris = iris.drop("species", axis=1)
y_iris = iris["species"]
model = PCA(n_components=2)
model.fit(X_iris)
X_2D = model.transform(X_iris)
iris["PCA1"] = X_2D[:, 0]
iris["PCA2"] = X_2D[:, 1]
# iris.head()
sns.lmplot("PCA1", "PCA2", hue= "species", data=iris, fit_reg=False)
2. 高斯混合模型
高斯混合模型主要用于数据的聚类分析,他可以对无标签的数据进行分组。
from sklearn.mixture import GaussianMixture
model = GaussianMixture(n_components=3, covariance_type="full")
model.fit(X_iris)
y_gmm = model.predict(X_iris)
iris["cluster"] = y_gmm
sns.lmplot("PCA1", "PCA2", data=iris, hue="species", col="cluster", fit_reg=False)
3. Isomap
Isomap算法是流形学习算法中的一种。流形学习它对存在非线性关系的数据集的处理效果非常好,它是一种无监督评估器,它试图将一个低维度流形嵌入到一个高维度空间来描述数据集。
from sklearn.datasets import load_digits
from sklearn.manifold import Isomap
digits = load_digits()
digits.images.shape
# 可视化数据集
fig, axes = plt.subplots(10, 10, figsize=(8,8),
subplot_kw={"xticks": [], "yticks": []},
gridspec_kw=dict(hspace=0.1, wspace=0.1))
for i, ax in enumerate(axes.flat):
ax.imshow(digits.images[i], cmap="binary", interpolation="nearest")
ax.text(0.05, 0.05, str(digits.target[i]), transform=ax.transAxes, color="green")
iso = Isomap(n_components=2)
iso.fit(digits.data)
data_projected = iso.transform(digits.data)
data_projected.shape
plt.scatter(data_projected[:, 0], data_projected[:, 1], c=digits.target, edgecolors="none", alpha=0.5, cmap=plt.cm.get_cmap("spectral", 10))
plt.colorbar(label="digit label", ticks=range(10))
plt.clim(-0.5, 9.5)