【scikit-learn】03:将sklearn库用于非监督性学习 聚类

  • 【scikit-learn】01:使用案例对sklearn库进行简单介绍
  • 【scikit-learn】02:使用sklearn库进行统计学习
  • 【scikit-learn】03:将sklearn库用于非监督性学习 聚类
  • 【scikit-learn】04:sklearn库下进行文本数据分析
  • 【scikit-learn】05:sklearn文本分类及评价指标
  • 【scikit-learn】06:make_blobs聚类数据生成器
  • 【scikit-learn】07:数据加载,数据归一,特征选择,逻辑回归,贝叶斯,k近邻,决策树,SVM

# -*-coding:utf-8-*-

# ----------------------
#   Author:kevinelstri
#   Datetime:2017.2.16
# ----------------------

# -----------------------
# Unsupervised learning: seeking representations of the data
# http://scikit-learn.org/stable/tutorial/statistical_inference/unsupervised_learning.html
# -----------------------
import numpy as np

'''
    非监督性学习
'''

'''
    Clustering: grouping observations together 聚类:分组观察
    The problem solved in clustering 聚类中的问题求解
    给定一个iris数据集,如果我们知道iris有三种类型,但是没有一个能够分开三类的标签;
    此时,可以尝试使用聚类任务,将观察到的数据划分成更好的组就叫做聚类。
'''
'''
    K-means clustering : k均值聚类
    聚类中存在许多不同的聚类标准和相关算法,最简单的聚类算法就是K均值聚类算法
'''
from sklearn import cluster, datasets

iris = datasets.load_iris()  # 加载数据集
x_iris = iris.data  # 数据集的数据
y_iris = iris.target  # 数据集的标签
print x_iris
print y_iris

k_means = cluster.KMeans(n_clusters=3)  # k_means分类器,参数n_clusters=3,划分成3类

print k_means.fit(x_iris)  # 分类器直接对数据进行聚类

print k_means.labels_[::10]  # 标签
print y_iris[::10]
print '-------------------------------------------------'
'''
    Application example: vector quantization :应用案例:矢量量化
    聚类的一般算法,特别的,可以作为一种选择一些典范的压缩信息,这个问题被称为矢量量化。
'''
import scipy as sp
import matplotlib.pyplot as plt

try:
    face = sp.face(gray=True)
except AttributeError:
    from scipy import misc

    face = misc.face(gray=True)

plt.gray()
plt.imshow(face)
plt.show()  # 显示原图

# 把图片像素进行聚类
X = face.reshape((-1, 1))
k_means = cluster.KMeans(n_clusters=5, n_init=1)  # 构造分类器,参数n_clusters是K值
print k_means.fit(X)  # 分类器对数据进行聚类,分类不需要预测
values = k_means.cluster_centers_.squeeze()
labels = k_means.labels_
face_compressed = np.choose(labels, values)
face_compressed.shape = face.shape
print face_compressed  # 图像中各个像素的大小
print face_compressed.shape  # 图像大小

plt.gray()
plt.imshow(face_compressed)
plt.show()  # 显示分类器操作过的图像

'''
    Hierarchical agglomerative clustering: Ward  层次凝聚聚类算法(自下向上)
    层次聚类方法是典型的聚类分析方法,目的是建立一个分层的聚类。一般,层次聚类的方法可以分为以下两种:
    自下向上-层次聚类(Agglomerative):
    自顶向下-层次聚类(Divisive):
'''
'''
    约束连接聚类:

'''
import matplotlib.pyplot as plt
from sklearn.feature_extraction.image import grid_to_graph
from sklearn.cluster import AgglomerativeClustering
from sklearn.utils.testing import SkipTest
from sklearn.utils.fixes import sp_version
from scipy import misc
import scipy as sp

if sp_version < (0, 12):
    raise SkipTest("Skipping because SciPy version earlier than 0.12.0 and "
                   "thus does not include the scipy.misc.face() image.")

try:
    face = sp.face(gray=True)
except AttributeError:
    from scipy import misc

    face = misc.face(gray=True)
face = sp.misc.imresize(face, 0.10) / 255.
plt.gray()
plt.imshow(face)
plt.show()

'''
    Feature agglomeration 特征群
'''
digits = datasets.load_digits()
images = digits.images
x = np.reshape(images, (len(images), -1))
connectivity = grid_to_graph(*images[0].shape)
agglo = cluster.FeatureAgglomeration(connectivity=connectivity, n_clusters=32)
print agglo.fit(x)
x_reduced = agglo.transform(x)
x_approx = agglo.inverse_transform(x_reduced)
images_approx = np.reshape(x_approx, images.shape)

'''
    Principal component analysis: PCA 降维
'''
x1 = np.random.normal(size=100)
x2 = np.random.normal(size=100)
x3 = x1 + x2
X = np.c_[x1, x2, x3]

from sklearn import decomposition
pca = decomposition.PCA()  # PCA降维算法
print pca.fit(X)  # 直接对数据进行降维
print pca.explained_variance_
pca.n_components = 2
X_reduced = pca.fit_transform(X)
print X_reduced.shape

KMeans案例:

# -*-coding:utf-8-*-
"""
第一部分:导入包
从sklearn.cluster机器学习聚类包中导入KMeans聚类
"""

from sklearn.cluster import Birch
from sklearn.cluster import KMeans

"""
第二部分:数据集
X表示二维矩阵数据,篮球运动员比赛数据
总共20行,每行两列数据
第一列表示球员每分钟助攻数:assists_per_minute
第二列表示球员每分钟得分数:points_per_minute
"""

X = [[0.0888, 0.5885],
     [0.1399, 0.8291],
     [0.0747, 0.4974],
     [0.0983, 0.5772],
     [0.1276, 0.5703],
     [0.1671, 0.5835],
     [0.1906, 0.5276],
     [0.1061, 0.5523],
     [0.2446, 0.4007],
     [0.1670, 0.4770],
     [0.2485, 0.4313],
     [0.1227, 0.4909],
     [0.1240, 0.5668],
     [0.1461, 0.5113],
     [0.2315, 0.3788],
     [0.0494, 0.5590],
     [0.1107, 0.4799],
     [0.2521, 0.5735],
     [0.1007, 0.6318],
     [0.1067, 0.4326],
     [0.1956, 0.4280]
     ]

# 输出数据集
print X

"""
第三部分:KMeans聚类
clf = KMeans(n_clusters=3) 表示类簇数为3,聚成3类数据,clf即赋值为KMeans
y_pred = clf.fit_predict(X) 载入数据集X,并且将聚类的结果赋值给y_pred
"""

clf = KMeans(n_clusters=3)  # 聚类算法,参数n_clusters=3,聚成3类
y_pred = clf.fit_predict(X)  # 直接对数据进行聚类,聚类不需要进行预测

# 输出完整Kmeans函数,包括很多省略参数
print clf
# 输出聚类预测结果,20行数据,每个y_pred对应X一行或一个球员,聚成3类,类标为0、1、2
print y_pred

"""
第四部分:可视化绘图
Python导入Matplotlib包,专门用于绘图
import matplotlib.pyplot as plt 此处as相当于重命名,plt用于显示图像
"""

import numpy as np
import matplotlib.pyplot as plt

# 获取第一列和第二列数据 使用for循环获取 n[0]表示X第一列
x = [n[0] for n in X]
print x
y = [n[1] for n in X]
print y

# 绘制散点图 参数:x横轴 y纵轴 c=y_pred聚类预测结果 marker类型 o表示圆点 *表示星型 x表示点
plt.scatter(x, y, c=y_pred, marker='x')

# 绘制标题
plt.title("Kmeans-Basketball Data")

# 绘制x轴和y轴坐标
plt.xlabel("assists_per_minute")
plt.ylabel("points_per_minute")

# 设置右上角图例
plt.legend(["A", "B", "C"])

# 显示图形
plt.show()

你可能感兴趣的:(Python,Sklearn机器学习,Sklearn,聚类,sklearn,机器学习)