• 无监督学习-主成分分析和聚类分析


    聚类分析(cluster analysis)是将一组研究对象分为相对同质的群组(clusters)的统计分析技术,即将观测对象的群体按照相似性和相异性进行不同群组的划分,划分后每个群组内部各对象相似度很高,而不同群组之间的对象彼此相异度很高。

    回归、分类、聚类的区别 :

    • 有监督学习 --->> 回归、分类    /   无监督学习  --->>聚类
    • 回归 -->>产生连续结果,可用于预测
    • 分类 -->>产生连续结果,可用于预测
    • 聚类 -->>产生一组集合,可用于降维

    一、PCA主成分分析

    二、PCA主成分的python实现方法

    通过sklearn的PCA类实现,from sklearn.decomposition import PCA

    pca = PCA(n_components=1) # n_components参数表示最终维度

    pca.fit(data) #创建模型

    data_pca = pca.transform(data) #降维,创建模型和降维可通过一步实现fit_transform

    data_inverse = pca.inverse_transform(data_pca) #根据降维结果反算原始数据

    1.二维数据降维

    rng = np.random.RandomState(8)
    data = np.dot(rng.rand(2,2),rng.randn(2,200)).T  #矩阵相乘
    df = pd.DataFrame({'X1':data[:,0],'X2':data[:,1]})
    print(df.shape)
    print(df.head())
    plt.scatter(df['X1'],df['X2'],alpha = 0.8,marker = '.')
    plt.axis('equal')  #坐标轴每个单位表示的刻度相同
    # (200, 2)
    #          X1        X2
    # 0 -1.174787 -1.404131
    # 1 -1.374449 -1.294660
    # 2 -2.316007 -2.166109
    # 3  0.947847  1.460480
    # 4  1.762375  1.640622

    from sklearn.decomposition import PCA
    pca = PCA(n_components=1) # n_components参数表示最终维度
    pca.fit(df)
    print(pca.explained_variance_)
    print(pca.components_)
    # print(pca.n_components) #返回保留的成分个数
    # print(pca.explained_variance_ratio_) 
    # 结果降为几个维度,就有几个特征值;原始数据有几个维度,就有几个特征向量
    # explained_variance_:特征值
    # components_:返回具有最大方差的成分,即特征向量
    
    # 这里是shape(200,2)降为shape(200,1),只有1个特征值,对应2个特征向量
    # 降维后主成分 A1 = 0.7788006 * X1 + 0.62727158 * X2
    # 成分的结果值 = 2.80 * (-0.77*x1 -0.62 * x2) #通过这个来筛选它的主成分
    
    df_pca = pca.transform(df)  # 数据转换,将原始二维数据转换为降维后的一维数据
    df_inverse = pca.inverse_transform(df_pca)  # 数据转换,将降维后的一维数据转换成原始的二维数据
    print('original shape:',df.shape)
    print('transformed shape:',df_pca.shape)
    print(df.head(10))
    print(df_pca[:10])
    print(df_inverse[:10])

    plt.scatter(df['X1'],df['X2'], alpha = 0.8, marker = '.') #原始数据散点;
    plt.scatter(x_inverse[:,0],x_inverse[:,1], alpha = 0.8, marker = '.',color = 'r') #转换之后的散点,红色的就是最后的特征数据
    plt.axis('equal')

    2.多维数据降维

     多维数据降维,使用自带的图像数据进行测试。

    from sklearn.datasets import load_digits
    digits = load_digits()
    print(type(digits))
    print(digits.data[:2])
    print('数据长度为:%i条' % len(digits['data']))
    print('数据形状为:',digits.data.shape) #总共1797条数据,每条数据有64个变量
    print('字段:',digits.keys())
    print('分类(数值):',digits.target)
    print('分类(名称):',digits.target_names)

    将上述数据由64维降为2维,降维后的2个维度肯定都是主成分。

    pca = PCA(n_components=2)  #降为2维
    projected = pca.fit_transform(digits.data)  #相当于先fit构建模型,再transform进行转换
    projected[:2]
    print('original shape:',digits.data.shape)
    print('transformed shape:',projected.shape)
    print('特征值',pca.explained_variance_)  #2个特征值
    print('特征向量',pca.components_.shape) #2个成分,每个成分都有64个特征向量
    
    # original shape: (1797, 64)
    # transformed shape: (1797, 2)
    # 特征值 [179.0069301  163.71774688]
    # 特征向量 (2, 64)
    plt.scatter(projected[:,0],projected[:,1],s = 10,c = digits.target, cmap='Reds',edgecolor = 'none',alpha = 0.5)
    plt.colorbar()

    将上述数据降为10维,并求主要成分。

    pca = PCA(n_components=10)  #降为10维
    projected = pca.fit_transform(digits.data)  #相当于先fit构建模型,再transform进行转换
    projected[:2]
    print('original shape:',digits.data.shape)
    print('transformed shape:',projected.shape)
    print(pca.explained_variance_)  # 输出特征值 ;10个特征值
    print(pca.components_.shape)  # 输出特征向量形状
    
    s = pca.explained_variance_
    c_s = pd.DataFrame({'x':s,'x_cumsum':s.cumsum()/s.sum()})
    print(c_s)
    c_s['x_cumsum'].plot(style = '--ko', figsize = (10,4))
    plt.axhline(0.85,color='r',linestyle="--",alpha=0.8)  
    plt.text(6,c_s['x_cumsum'].iloc[6]-0.1,'第7个成分累计贡献率超过85%',color = 'r')
    plt.grid()

       

    三、K-means聚类的python实现方法

    K-means聚类是最常用的机器学习聚类算法,且为典型的基于距离的聚类算法。主要步骤为:

    kmeans = KMeans(n_clusters=4) #创建模型

    kmeans.fit(x) #导入数据

    y_kmeans = kmeans.predict(x) #预测每个数据属于哪个类

    centroids = kmeans.cluster_centers_ #每个类的中心点

     先使用sklearn自带的生成器生成数据

    from sklearn.datasets.samples_generator import make_blobs  # make_blobs聚类数据生成器
    x,y_true = make_blobs(n_samples=300,centers=4,cluster_std=0.5,random_state=0)
    print(x[:5])
    print(y_true[:5])
    
    # n_samples 生成的样本总数
    # centers 类别数
    # cluster_std 每个类别的方差,如果多类数据不同方差可设置为[std1,std2,...stdn]
    # random_state 随机数种子
    # x 生成的数据,y 数据对应的类别
    # n_features 每个样本的特征数
    
    plt.scatter(x[:,0],x[:,1],s=10,alpha=0.8)

       

    通过sklearn的KMeans进行聚类分析

    from sklearn.cluster import KMeans
    kmeans = KMeans(n_clusters=4)  #创建模型
    kmeans.fit(x)  #导入数据
    y_kmeans = kmeans.predict(x)  #预测每个数据属于哪个类
    centroids = kmeans.cluster_centers_ #每个类的中心点
    plt.scatter(x[:,0],x[:,1],s=30,c=y_kmeans,cmap = 'Dark2',alpha=0.5,marker='x')
    plt.scatter(centroids[:,0],centroids[:,1],s=70,c=[0,1,2,3],cmap = 'Dark2',marker='o')
    plt.title('K-means 300 points')
    plt.xlabel('value1')
    plt.ylabel('value2')

  • 相关阅读:
    Linux系统格式化磁盘+挂载分区
    ELK日志处理
    memcached安装+绑定访问ip
    Redis安装+密码认证
    linux安全
    Mysql备份与恢复
    MySql binlog
    gitlab自动备份
    Rabbitmq安装与配置
    Hadoop实战-Flume之Source interceptor(十一)(2017-05-16 22:40)
  • 原文地址:https://www.cnblogs.com/Forever77/p/11386031.html
Copyright © 2020-2023  润新知