最近在搞一个分类项目。
用到了kmeans和pca。
之前都是网上找的实现代码,用起来比较麻烦,代码也多。
后来发现用sklearn就有现成的pca和kmeans。
pca的代码和主要参数解释。[原文链接:https://blog.csdn.net/qq_20135597/article/details/95247381]
sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)
参数:
n_components:
意义:PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n
类型:int 或者 string,缺省时默认为None,所有成分被保留。
赋值为int,比如n_components=1,将把原始数据降到一个维度。
赋值为string,比如n_components='mle',将自动选取特征个数n,使得满足所要求的方差百分比。
copy:
类型:bool,True或者False,缺省时默认为True。
意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不 会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的 值会改,因为是在原始数据上进行降维计算。
whiten:
类型:bool,缺省时默认为False
意义:白化,使得每个特征具有相同的方差。
完整的pca。[原文链接:https://blog.csdn.net/qq7835144/article/details/103436685]
class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver=‘auto’, tol=0.0, iterated_power=‘auto’, random_state=None)
参数:
n-components:int, float, None or st:指定PCA降维后的特征维度数目。
默认值为min(样本数,特征数)。之所以不能小于样本数是因为前面已经说明输入数据不是稀疏的。
如果 n_components设为 ‘mle’ ,svd_solver 设为 ‘full’, 则使用Minka’s MLE方法来估计降维后特征的维度。如果svd_solver设为’auto’,则自动将svd_solver设为’full’。这里使用最大似然估计的方法来得到降维后的维度, 实际上是Probabilistic PCA,简称PPCA,可以参考 https://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_fa_model_selection.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-fa-model-selection-py
如果n_components设为大于0小于1的小数且svd_solver设为’full’,则自动根据样本特征方差来决定降维到的维度数,这里n_components表示主成分的方差和所占的最小比例阈值。
如果svd_solver = ‘arpack’, n_components 必须严格地小于min(样本数,特征数),此时n_components默认为min(样本数,特征数) - 1。
copy:copybool, default=True:如果设为False,原输入数据会被新的结果覆盖掉,使用默认的True就可以。
whiten: bool, optional (default False):白化会去除变换信号中的一些信息(分量的相对方差尺度),但在数据有比较强的相关性的假设下,有时可以提高下游估计器的性能。
svd_solver:str {‘auto’, ‘full’, ‘arpack’, ‘randomized’}:SVD求解方法。之所以提供这么多方法,一定是在计算时间和精确度上有区别,不过我没有详细研究。
如果设为’auto’,则自动选择求解方法。当输入数据大于500*500且提取的主成分小于80%,则使用更有效率的’randomized’方法,否则将使用精确的SVD方法,即’full’。
如果设为’full’,则使用scipy.linalg.svd来计算SVD分解。
如果设为’arpack’,则使用scipy.sparse.linalg.svds计算SVD分解。这种方法严格要求 0 < n_components < min(样本数,特征数)。
如果设为’randomized’,则使用Halko等人提出的随机SVD方法。
tol:float >= 0, optional (default .0):当svd_solver = ‘arpack’,用来设置奇异值的容忍度。(我觉得应该类似于收敛门限这一类的参数)
iterated_power:int >= 0, or ‘auto’, (default ‘auto’):当svd_solver = ‘randomized’,用来设置计算功率法的迭代次数。
random_state:int, RandomState instance or None, optional (default None):当svd_solver = ‘arpack’或者svd_solver = ‘randomized’时,这个参数才起作用。用于产生随机数。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。