sklearn的常用函数以及参数——3. 聚类算法&降维算法
2018-12-04 本文已影响0人
博士伦2014
聚类算法
1. knn算法
from sklearn.neighbors import NearestNeighbors
nbrs = NearestNeighbors()
'''
__init__函数
def __init__(self, n_neighbors=5, radius=1.0,
algorithm='auto', leaf_size=30, metric='minkowski',
p=2, metric_params=None, n_jobs=1, **kwargs):
n_neighbors,整数,可选(默认值为5),用k_neighbors查找的近邻数
radius,参数空间的范围
'''
2.Kmeans算法
from sklearn.cluster import KMeans
k = KMeans()
'''
__init__函数
def __init__(self, n_clusters=8, init='k-means++', n_init=10,
max_iter=300, tol=1e-4, precompute_distances='auto',
verbose=0, random_state=None, copy_x=True,
n_jobs=1, algorithm='auto'):
n_clusters,生成的聚类数,即产生的质心(centroids)数
max_iter,执行一次k-means算法所进行的最大迭代数。
n_init,用不同的质心初始化值运行算法的次数,最终解是在inertia意义下选出的最优结果。
init:有三个可选值:’k-means++’, ‘random’,或者传递一个ndarray向量。
此参数指定初始化方法,默认值为 ‘k-means++’。
(1)‘k-means++’ 用一种特殊的方法选定初始质心从而能加速迭代过程的收敛(即上文中的k-means++介绍)
(2)‘random’ 随机从训练数据中选取初始质心。
(3)如果传递的是一个ndarray,则应该形如 (n_clusters, n_features) 并给出初始质心。
precompute_distances,三个可选值,‘auto’,True 或者 False。预计算距离,计算速度更快但占用更多内存。
tol,默认值= 1e-4 与inertia结合来确定收敛条件。
random_state,用于初始化质心的生成器(generator)。如果值为一个整数,则确定一个seed。此参数默认值为numpy的随机数生成器。
copy_x,当我们precomputing distances时,将数据中心化会得到更准确的结果。如果把此参数值设为True,则原始数据不会被改变。
如果是False,则会直接在原始数据上做修改并在函数返回值时将其还原。
但是在计算过程中由于有对数据均值的加减运算,所以数据返回后,原始数据和计算前可能会有细小差别。
用法:
fit(X[,y]):
计算k-means聚类。
fit_predictt(X[,y]):
计算簇质心并给每个样本预测类别。
fit_transform(X[,y]):
计算簇并 transform X to cluster-distance space。
get_params([deep]):
取得估计器的参数。
predict(X):predict(X)
给每个样本估计最接近的簇。
score(X[,y]):
计算聚类误差
set_params(**params):
为这个估计器手动设定参数。
transform(X[,y]): 将X转换为群集距离空间。
在新空间中,每个维度都是到集群中心的距离。 请注意,即使X是稀疏的,转换返回的数组通常也是密集的。
'''
3. 层次聚类
from sklearn.cluster import AgglomerativeClustering
agg = AgglomerativeClustering()
'''
__init__函数
def __init__(self, n_clusters=2, affinity="euclidean",
memory=None,
connectivity=None, compute_full_tree='auto',
linkage='ward', pooling_func=np.mean):
n_clusters,一个整数,指定分类簇的数量
connectivity,一个数组或者可调用对象或者None,用于指定连接矩阵
affinity,一个字符串或者可调用对象,用于计算距离。
memory,用于缓存输出的结果,默认为不缓存
compute_full_tree,通常当训练了n_clusters后,训练过程就会停止,但是如果compute_full_tree=True,则会继续训练从而生成一颗完整的树
linkage,一个字符串,用于指定链接算法
属性:
labels:每个样本的簇标记
n_leaves_:分层树的叶节点数量
n_components:连接图中连通分量的估计值
children:一个数组,给出了每个非节点数量
方法:
fit(X[,y]):训练样本
fit_predict(X[,y]):训练模型并预测每个样本的簇标记
'''
4. DBSCAN
from sklearn.cluster import DBSCAN
dbs = DBSCAN()
'''
__init__函数
def __init__(self, eps=0.5, min_samples=5, metric='euclidean',
metric_params=None, algorithm='auto', leaf_size=30, p=None,
n_jobs=1):
eps,DBSCAN算法参数,即我们的ϵ-邻域的距离阈值,和样本距离超过ϵ的样本点不在ϵ-邻域内。默认值是0.5。一般需要通过在多组值里面选择一个合适的阈值。
eps过大,则更多的点会落在核心对象的ϵ-邻域,此时我们的类别数可能会减少, 本来不应该是一类的样本也会被划为一类。
反之则类别数可能会增大,本来是一类的样本却被划分开。
min_samples,DBSCAN算法参数,即样本点要成为核心对象所需要的ϵ-邻域的样本数阈值。默认值是5. 一般需要通过在多组值里面选择一个合适的阈值。
通常和eps一起调参。在eps一定的情况下,min_samples过大,则核心对象会过少,此时簇内部分本来是一类的样本可能会被标为噪音点,类别数也会变多。
反之min_samples过小的话,则会产生大量的核心对象,可能会导致类别数过少。
metric,最近邻距离度量参数
algorithm,最近邻搜索算法参数
'''
降维算法
1. 主成分分析法
from sklearn.decomposition import PCA
pca = PCA()
'''
__init__函数
def __init__(self, n_components=None, copy=True, whiten=False,
svd_solver='auto', tol=0.0, iterated_power='auto',
random_state=None):
n_components,PCA算法中所要保留的主成分个数n,即保留下来的特征个数n
copy,表示是否在运行算法时,将原始训练数据复制一份。
whiten,白化,使得每个特征具有相同的方差
'''
# 核函主成分
from sklearn.decomposition import KernelPCA
kpca = KernelPCA()
'''
__init__函数
def __init__(self, n_components=None, kernel="linear",
gamma=None, degree=3, coef0=1, kernel_params=None,
alpha=1.0, fit_inverse_transform=False, eigen_solver='auto',
tol=0, max_iter=None, remove_zero_eig=False,
random_state=None, copy_X=True, n_jobs=1):
'''
2. 因子分析
from sklearn.decomposition import FactorAnalysis
fac = FactorAnalysis()
'''
__init__函数
def __init__(self, n_components=None, tol=1e-2, copy=True, max_iter=1000,
noise_variance_init=None, svd_method='randomized',
iterated_power=3, random_state=0):
'''