[]機械学習機械は、ポータル08--クラスタリングとK平均クラスタリングアルゴリズムを学びます

時間ハエは、この記事では、機械学習ポータルのシリーズの最後です。8週間の短い期間、機械学習、そこにずっと使用する機会と馴染みがありませんが、機械学習の基本的な概念のいくつかのために、ほとんどそのような分類と回帰、機能の喪失だけでなく、いくつかの簡単なように、総観の理解されているものの、 --kNNアルゴリズムアルゴリズム、決定木アルゴリズム。
さて、今日はK平均クラスタリングアルゴリズムを使用することにし、私たちの旅この機械学習を終了します。

1.クラスタリング

1.1クラスタリングとは何ですか

オブジェクトの複数のクラスになどによる物理的あるいは抽象的なオブジェクトのコレクションのプロセスは、クラスタリングと呼ばれています。クラスタによって生成されたクラスタは、データオブジェクトのセットのコレクションであり、これらは一つのクラスタ内の同じオブジェクトと別の同様のオブジェクト、クラスタは、他のオブジェクトとは異なります。自然科学と社会科学に「などはグループの人々、のように引き付ける」、分類がたくさんあります。また、コホート分析として知られているクラスター分析は、それが統計的分析方法(試料または指数)分類問題の研究です。クラスター分析は、分類学で始まったが、平均クラスタリング分類を行いません。異なるクラスタの分類という点で、クラスタ分割に必要なクラスが知られていません。コンテンツのクラスター分析は非常に豊富で、階層的クラスタリング方法は、予測方法をクラスタリング、サンプルクラスタリング、ダイナミッククラスタリング、ファジィクラスタリング、グラフ理論、クラスタリングを命じました。

-から抜粋 Baiduの百科事典 「クラスタリング」エントリ。

クラスター分析(英語:クラスター分析)、また、クラスター分析として知られているが、統計的データ解析のための手法である、それは広く機械学習、データマイニング、パターン認識、画像解析、バイオインフォマティクスなど、多くの分野で使用されています。クラスタリングはそうオブジェクトのメンバの同じサブセット内の一部の特性のために、共通の座標系に類似含んでいた、静的分類によって異なるグループまたは複数のサブセット(部分集合)に類似したオブジェクトであります短い距離のためのより多くのスペース。

一般的に教師なし学習をクラスタリングデータとしてまとめました。

-から抜粋 ウィキペディア 「クラスター分析」エントリー

翻訳、データセットは、いくつかのサブサンプルセットに分かれているクラスターしようとして、各サブ統合、交差通常ではありません「クラスタ」。
この分割により、各クラスタは、「淡色メロン」、「暗いメロン」、「スイカが有する」「NOスイカ」あるいは「このサツマイモ」と「外側サツマイモなどの基礎となる概念(すなわちクラス)の一部に対応し得ます以下のように「と、アルゴリズムをクラスタリングするためのこれらの概念は、事前に不明であることに留意すべきである、自動クラスタリングプロセスは、意味論と命名の概念を把握するためにユーザがクラスタに対応し、クラスタ構造を形成することができます。(抜粋からhttps://www.jianshu.com/p/caef1926adf7

1.2クラスタリングと分類の違い

クラスタリングは教師なし学習アルゴリズムは、分類は、教師付き学習アルゴリズムです。、アルゴリズムを機械学習モデルを構築し、適切なパラメータへのトレーニングセットに学ぶために、その後、テストセットに適用される(データのトレーニングセットがどのカテゴリに属する​​どこ事前に知ることがある)が知らラベルのいわゆる教師トレーニングセットがあります。クラスタリングアルゴリズムは、ラベルなし、クラスタリングされていない、我々はクラスがあり、我々は目標を達成するために必要なものを気にしない同様のものが一緒にもたらすことです。

例の小さなボールを持ちます:

  • 分類 - 準備ボックスの数が「黄色」、「緑色」、「赤」、「青」とマークされた、色によって4色のボールの数は、適切なボックスにドロップ
  • 箱、箱と箱の数を準備する間に違いはありません。(:色の分類によれば、より大きな色差;色が近づくにつれてサイズに従って分類;軟質の程度や大きさが近いも同時に因子の一連の検討など。)は、異なるボックスに気分によってボールの数。
    簡単に言えば、箱事前にカスタマイズに投げ指定された基準ボールに基づいて分類され、リアルタイムのクラスタリングには、いくつかの同一の箱を投げ知られている基準に従ってボールを入れています。

2.クラスタ

オブジェクトの各セットは、ターゲットクラスタを分割したクラスタリングと呼ばれています。クラスタ便利なオブジェクトを取得するために意味のあるクラスター分析であることは最も重要なステップです。:ここではいくつかの一般的なクラスタである

(からの抜粋https://blog.csdn.net/taoyanqi8932/article/details/53727841
K-手段が、我々は、クラスタへの使用を勉強しようとしているアルゴリズムであり、クラスタの中心部に基づいて、タイプ。

距離を述べ、その後、前の記事が言及した様々な種類の中から繰り返します。

私たちの最も人気がまだユークリッド距離である(すなわち、差分ベクトルの2ノルム)

3. K平均アルゴリズム

3.1は、K平均アルゴリズムとは何ですか

アルゴリズムクラスタリングアルゴリズム(アルゴリズムをk-meansクラスタリング)をk-meansクラスタリング反復ソルバー、初期Kクラスタ中心としてランダムに選択されたオブジェクトのステップし、各被験者について計算とシードのクラスタ中心のそれぞれであります間の距離は、最も近いクラスタ中心からの距離に各オブジェクトを割り当てます。クラスタ中心とクラスタに代わってそれらに割り当てられたオブジェクト。各サンプルは、クラスタ中心のクラスタリングは、既存のクラスタ・オブジェクトに基づいて再計算されて割り当てられます。終了条件が満たされるまで、このプロセスが繰り返されます。オブジェクトの状態がない(または最小限の数)とすることができる終端は局所最小二乗誤差、クラスタ中心次いで変動なし、異なるクラスタに再割り当て(または最小限の数)です。

-から抜粋 Baiduの百科事典 「クラスタリングアルゴリズムK-手段」のエントリ

K-平均算法(英文:k-means clustering)源于信号处理中的一种向量量化方法,现在则更多地作为一种聚类分析方法流行于数据挖掘领域。k-平均聚类的目的是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。这个问题将归结为一个把数据空间划分为Voronoi cells的问题。

这个问题在计算上是NP困难的,不过存在高效的启发式算法。一般情况下,都使用效率比较高的启发式算法,它们能够快速收敛于一个局部最优解。这些算法通常类似于通过迭代优化方法处理高斯混合分布的最大期望算法(EM算法)。而且,它们都使用聚类中心来为数据建模;然而k-平均聚类倾向于在可比较的空间范围内寻找聚类,期望-最大化技术却允许聚类有不同的形状。

k-平均聚类与k-近邻之间没有任何关系(后者是另一流行的机器学习技术)。

——摘自 Wikipedia“K-Means算法”词条

简而言之,K-Means算法做的事情是:对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

3.2 K-Means算法的优缺点

  • 优点:
    • 简单,易于理解和实现;收敛快,一般仅需5-10次迭代即可,高效
  • 缺点:
    • 对K值得选取把握不同对结果有很大的不同
    • 对于初始点的选取敏感,不同的随机初始点得到的聚类结果可能完全不同
    • 对于不是凸的数据集比较难收敛
    • 对噪点过于敏感,因为算法是根据基于均值的
    • 结果不一定是全局最优,只能保证局部最优
    • 对球形簇的分组效果较好,对非球型簇、不同尺寸、不同密度的簇分组效果不好。

3.3 K-Means算法描述和代码实现

K-Means算法的流程描述如下:

给出一段参考的Python代码实现:

import numpy as np
import pandas as pd
import random
import sys
import time
class KMeansClusterer:
    def __init__(self,ndarray,cluster_num):
        self.ndarray = ndarray
        self.cluster_num = cluster_num
        self.points=self.__pick_start_point(ndarray,cluster_num)
         
    def cluster(self):
        result = []
        for i in range(self.cluster_num):
            result.append([])
        for item in self.ndarray:
            distance_min = sys.maxsize
            index=-1
            for i in range(len(self.points)):                
                distance = self.__distance(item,self.points[i])
                if distance < distance_min:
                    distance_min = distance
                    index = i
            result[index] = result[index] + [item.tolist()]
        new_center=[]
        for item in result:
            new_center.append(self.__center(item).tolist())
        # 中心点未改变,说明达到稳态,结束递归
        if (self.points==new_center).all():
            return result
         
        self.points=np.array(new_center)
        return self.cluster()
             
    def __center(self,list):
        '''计算一组坐标的中心点
        '''
        # 计算每一列的平均值
        return np.array(list).mean(axis=0)
    def __distance(self,p1,p2):
        '''计算两点间距
        '''
        tmp=0
        for i in range(len(p1)):
            tmp += pow(p1[i]-p2[i],2)
        return pow(tmp,0.5)
    def __pick_start_point(self,ndarray,cluster_num):
        
        if cluster_num <0 or cluster_num > ndarray.shape[0]:
            raise Exception("簇数设置有误")
      
        # 随机点的下标
        indexes=random.sample(np.arange(0,ndarray.shape[0],step=1).tolist(),cluster_num)
        points=[]
        for index in indexes:
            points.append(ndarray[index].tolist())
        return np.array(points)

4. 结语

好了,为期八周的机器学习入门到这里就结束了。希望这段学习经历能够或多或少能在将来起到一些作用。
那么,笔者也终于可以全心全意开始课程设计和期末复习啦。Bye~

参考资料:

https://www.jianshu.com/p/caef1926adf7
https://blog.csdn.net/taoyanqi8932/article/details/53727841
https://zh.wikipedia.org/wiki/%E8%81%9A%E7%B1%BB%E5%88%86%E6%9E%90
https://zh.wikipedia.org/wiki/K-%E5%B9%B3%E5%9D%87%E7%AE%97%E6%B3%95
https://baike.baidu.com/item/K%E5%9D%87%E5%80%BC%E8%81%9A%E7%B1%BB%E7%AE%97%E6%B3%95/15779627?fr=aladdin
https://baike.baidu.com/item/%E8%81%9A%E7%B1%BB/593695?fr=aladdin

おすすめ

転載: www.cnblogs.com/DrChuan/p/12082985.html