K_Means聚类算法

sklearn是机器学习中一个常用的python第三方模块,对常用的机器学习算法进行了封装
其中包括:
1.分类(Classification)
2.回归(Regression)
3.聚类(Clustering)
4.数据降维(Dimensionality reduction)
5.常用模型(Model selection)
6.数据预处理(Preprocessing)

 

 

skleran安装

使用pip安装,terminal直接执行即可

pip install -U scikit-learn

使用Anaconda安装,推荐Anaconda,因为里面已经内置了NumPy,SciPy等常用工具

conda install scikit-learn

安装完成后可以在python中检查一下版本,import sklearn不报错,则表示安装成功

>>import sklearn
>>sklearn.__version__
'0.19.1'

获取数据

机器学习算法往往需要大量的数据,在skleran中获取数据通常采用两种方式,一种是使用自带的数据集,另一种是创建数据集

导入数据集

sklearn自带了很多数据集,可以用来对算法进行测试分析,免去了自己再去找数据集的烦恼
其中包括:
鸢尾花数据集:load_iris()
手写数字数据集:load_digitals()
糖尿病数据集:load_diabetes()
乳腺癌数据集:load_breast_cancer()
波士顿房价数据集:load_boston()
体能训练数据集:load_linnerud()

这里以鸢尾花数据集为例导入数据集


#导入sklearn的数据集

import sklearn.datasets as sk_datasets

iris = sk_datasets.load_iris()

iris_X = iris.data #导入数据
iris_y = iris.target #导入标签

 

# -*- coding: utf-8 -*-
from sklearn.cluster import KMeans
from sklearn.externals import joblib
import numpy

final = open('c:/test/final.dat' , 'r')

data = [line.strip().split('\t') for line in final]
feature = [[float(x) for x in row[3:]] for row in data]

#调用kmeans类
clf = KMeans(n_clusters=9)
s = clf.fit(feature)
print s

#9个中心
print clf.cluster_centers_

#每个样本所属的簇
print clf.labels_

#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数
print clf.inertia_

#进行预测
print clf.predict(feature)

#保存模型
joblib.dump(clf , 'c:/km.pkl')

#载入保存的模型
clf = joblib.load('c:/km.pkl')

'''
#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数
for i in range(5,30,1):
    clf = KMeans(n_clusters=i)
    s = clf.fit(feature)
    print i , clf.inertia_
'''
  • 初学者讲解如下: 

参考http://www.cnblogs.com/meelo/p/4272677.html 
sklearn对于所有的机器学习算法有一个一致的接口,一般需要以下几个步骤来进行学习: 
1、初始化分类器,根据不同的算法,需要给出不同的参数,一般所有的参数都有一个默认值。 
这里写图片描述
(1)对于K均值聚类,我们需要给定类别的个数n_cluster,默认值为8; 
(2)max_iter为迭代的次数,这里设置最大迭代次数为300; 
(3)n_init设为10意味着进行10次随机初始化,选择效果最好的一种来作为模型; 
(4) init=’k-means++’ 会由程序自动寻找合适的n_clusters; 
(5)tol:float形,默认值= 1e-4,与inertia结合来确定收敛条件; 
(6)n_jobs:指定计算所用的进程数; 
(7)verbose 参数设定打印求解过程的程度,值越大,细节打印越多; 
(8)copy_x:布尔型,默认值=True。当我们precomputing distances时,将数据中心化会得到更准确的结果。如果把此参数值设为True,则原始数据不会被改变。如果是False,则会直接在原始数据 
上做修改并在函数返回值时将其还原。但是在计算过程中由于有对数据均值的加减运算,所以数据返回后,原始数据和计算前可能会有细小差别。 
属性: 
这里写图片描述
(1)cluster_centers_:向量,[n_clusters, n_features] 
Coordinates of cluster centers (每个簇中心的坐标??); 
(2)Labels_:每个点的分类; 
(3)inertia_:float,每个点到其簇的质心的距离之和。 
比如我的某次代码得到结果: 
这里写图片描述 
2、对于非监督机器学习,输入的数据是样本的特征,clf.fit(X)就可以把数据输入到分类器里。 

3、用分类器对未知数据进行分类,需要使用的是分类器的predict方法。

# -*- coding: utf-8 -*-
from sklearn.cluster import KMeans
from sklearn.externals import joblib
import numpy

final = open('c:/test/final.dat' , 'r')

data = [line.strip().split('\t') for line in final]
feature = [[float(x) for x in row[3:]] for row in data]

#调用kmeans类
clf = KMeans(n_clusters=9)
s = clf.fit(feature)
print s

#9个中心
print clf.cluster_centers_

#每个样本所属的簇
print clf.labels_

#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数
print clf.inertia_

#进行预测
print clf.predict(feature)

#保存模型
joblib.dump(clf , 'c:/km.pkl')

#载入保存的模型
clf = joblib.load('c:/km.pkl')

'''
#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数
for i in range(5,30,1):
    clf = KMeans(n_clusters=i)
    s = clf.fit(feature)
    print i , clf.inertia_
'''

该篇记录笔记,参考:http://blog.itpub.net/12199764/viewspace-1479320/ 

https://www.jianshu.com/p/a9168803edc6  和  https://blog.csdn.net/EleanorWiser/article/details/70226704 

感谢他们,如果有侵权立马删

你可能感兴趣的:(ai学习)