NMF降维-鸢尾花案例

439 阅读1分钟

NMF降维

具体原理不再赘述. 网上一堆.

大多数NMF案例都是针对于人脸数据集进行降维操作, 本文章记录NMF对鸢尾花数据集进行操作.

目标: 鸢尾花数据集的X共四个维度(四个特征), 要将其降到两个维度, 并可视化.

代码实现

from sklearn import decomposition
from sklearn.datasets import load_iris

import matplotlib.pyplot as plt

nmf = decomposition.NMF(n_components=2)

dataset = load_iris()
X = dataset.data
y = dataset.target

red_x, red_y = [], []
blue_x, blue_y = [], []
green_x, green_y = [], []

reduced_X = nmf.fit_transform(X)  # 降到二维后, reduce_X应该是二维的, 第一个维度大小等于样本个数, 第二个维度存储对应的第n个样本的降维后的两个特征, 与n_components参数对应.

for i in range(len(reduced_X)):
    if y[i] == 0:
        red_x.append(reduced_X[i][0])
        red_y.append(reduced_X[i][1])
    elif y[i] == 1:
        blue_x.append(reduced_X[i][0])
        blue_y.append(reduced_X[i][1])
    else:
        green_x.append(reduced_X[i][0])
        green_y.append(reduced_X[i][1])


plt.scatter(red_x, red_y, color='r')
plt.scatter(blue_x, blue_y, color='b')
plt.scatter(green_x, green_y, color='g')

plt.show()