K-means聚类
k-means聚类算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。
(1)簇个数 k 的选择;
(2)计算各个样本点到“簇中心”的距离,将其归入最近的簇;
(3)根据新划分的簇,更新“簇中心”;
(4)重复上述2、3过程,直至"簇中心"没有移动。
Python可以调用sklearn库,from sklearn.cluster import KMeans,实现k聚类。
y_pred=KMeans(n_clusters=5).fit_transform(data)
#分成5类这个KMeans()函数的参数及用法可以参考这篇文章。
这篇文章讲的很详细,可以参考。
PCA
数据降维的一种方法是通过特征提取实现,主成分分析PCA就是一种无监督数据压缩技术,广泛应用于特征提取和降维。
pca = PCA(n_components=64)
pca.fit(data)
PCA_S=pca.transform(data)
可以调库实现PCA降维;
参数:
n_components: PCA算法中所要保留的主成分个数n。
copy:bool,True或者False,缺省时默认为True。
whiten:bool:缺省时默认为False,白化。
方法:
fit(X):表示用数据X来训练PCA模型。
fit_transform(X):用X来训练PCA模型,同时返回降维后的数据。
降维的时候,data传入的数据必须是每一行代表一个样本,一行里面包含样本所有的属性维度。
t-SNE
t-SNE的计算复杂度很高,在数百万个样本数据集中可能需要几个小时,而PCA可以在几秒钟或几分钟内完成。
Barnes-Hut t-SNE主要是对传统t-SNE在速度上做了优化,是现在最流行的t-SNE方法,同时它与传统t-SNE还有一些不同:
Barnes-Hut t-SNE方法(下面讲)仅限于二维或三维嵌入。
Barnes-Hut仅在目标维度为3或更小时才起作用。以2D可视化为主。
Barnes-Hut可用于嵌入数十万个数据点。
t-sne=tsne(X, labels, no_dims, init_dims, perplexity)
参数:
n_components :int, 默认为2,嵌入空间的维度(即要降到的维度);
perplexity: float, 默认为30,数据集越大,需要参数值越大,建议值位5-50;
init:string or numpy array, default:”random”, 可以是’random’, ‘pca’或者一个numpy数组(shape=(n_samples, n_components);
方法:
fit :将X投影到一个嵌入空间
fit_transform:将X投影到一个嵌入空间并返回转换结果
tsne = TSNE(n_components=2, init='pca', random_state=0)
X_tsne=tsne.fit_transform(data)