参考文章:https://blog.csdn.net/eastmount/article/details/53285192
特征降维是指采用一个低纬度的特征来表示高纬度。特征降维一般有两类方法:特征选择(Feature Selection)和特征提取(Feature Extraction)。
1.特征选择是从高纬度的特征中选择其中的一个子集来作为新的特征。最佳子集是以最少的维贡献最大的正确率,丢弃不重要的维,使用合适的误差函数进行,方法包括在向前选择(Forword Selection)和在向后选择(Backward Selection)。
2.特征提取是指将高纬度的特征经过某个函数映射至低纬度作为新的特征。常用的特征抽取方法就是PCA(主成分分析)和LDA(线性判别分析) 。
聚类糖尿病及PCA降维
#-*-coding:utf-8 -*-
#导入糖尿病数据
import numpy as np
from sklearn.datasets import load_diabetes
data = load_diabetes()
x = data.data
print x[:4]
y = data.target
print y[:4]
#KMeans聚类算法
from sklearn.cluster import KMeans
#训练
clf = KMeans(n_clusters=2)
print clf
clf.fit(x)
#预测
pre = clf.predict(x)
print pre[:10]
#降维
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
newData = pca.fit_transform(x)
print newData[:4]
L1 = [n[0] for n in newData]
L2 = [n[1] for n in newData]
#绘图
import matplotlib.pyplot as plt
#用来正常显示中文标签
plt.rc('font',family='SimHei',size=8)
#plt.rcParams['font.sans-serif']=['SimHei']
#用来正常显示负号
plt.rcParams['axes.unicode_minus']=False
p1 = plt.subplot(221)
plt.title('kmeans n=2')
plt.scatter(L1,L2,c=pre,marker='s')
plt.sca(p1)
#类簇3
clf = KMeans(n_clusters=3)
clf.fit(x)
pre = clf.predict(x)
p2 = plt.subplot(222)
plt.title('kmeans n=3')
plt.scatter(L1,L2,c=pre,marker='s')
plt.sca(p2)
#类簇4
clf = KMeans(n_clusters=4)
clf.fit(x)
pre = clf.predict(x)
p3 = plt.subplot(223)
plt.title('kmeans n=4')
plt.scatter(L1,L2,c=pre,marker='s')
plt.sca(p3)
#类簇5
clf = KMeans(n_clusters=5)
clf.fit(x)
pre = clf.predict(x)
p4 = plt.subplot(224)
plt.title("Kmeans n=5")
plt.scatter(L1,L2,c=pre,marker="+")
plt.sca(p4)
#保存图片本地
plt.savefig('power.png', dpi=300)
plt.show()
运行结果
[[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076
-0.04340085 -0.00259226 0.01990842 -0.01764613]
[-0.00188202 -0.04464164 -0.05147406 -0.02632783 -0.00844872 -0.01916334
0.07441156 -0.03949338 -0.06832974 -0.09220405]
[ 0.08529891 0.05068012 0.04445121 -0.00567061 -0.04559945 -0.03419447
-0.03235593 -0.00259226 0.00286377 -0.02593034]
[-0.08906294 -0.04464164 -0.01159501 -0.03665645 0.01219057 0.02499059
-0.03603757 0.03430886 0.02269202 -0.00936191]]
[ 151. 75. 141. 206.]
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
n_clusters=2, n_init=10, n_jobs=1, precompute_distances='auto',
random_state=None, tol=0.0001, verbose=0)
[1 0 1 1 0 0 0 1 1 0]
[[ 0.02793062 -0.09260116]
[-0.13468605 0.06526341]
[ 0.01294474 -0.07776417]
[ 0.00234544 0.01818194]]