K-means법(집계 방법)을 시험적으로 실시하였다.

  • 제조업 출신 데이터 과학자가 보낸 글
  • 이번에 컬렉션 기법에서 K-means법이 시행됐다.
  • 이른바 집합


    이른바 집합이란 어떤 집합을 어떤 규칙에 따라 분류하는 것을 가리킨다.기계 학습에서 분류는'무교사 학습'으로 분류된다.
    몇 가지 분류의 계산 방법이 있지만 견본 간의 유사성에 따라 조를 나눈다.집합의 계산 방법을 대체적으로 분류하면'층급 집합'과'비층급 집합'두 종류로 나눌 수 있다.
    이번에 시행된 K-means법은'비계층 클러스터'로 분류된다.

    이른바 K-means법


    집합의 평균치를 사용하여 미리 결정된 집합수로 분류한다.K-means법의 알고리즘 개요는 다음과 같다.
  • 클러스터 센터의 초기 값 k개 결정
  • 모든 견본과 k개 집단의 중심 거리를 확정하고 가장 가까운 집단으로 분류
  • 형성된 k개 집단의 중심을 확정
  • 중심에 변화가 없을 때까지 2단계와 3단계를 반복

  • K-means법의 실현


    python의 코드는 다음과 같습니다.
    # 必要なライブラリーのインストール
    import numpy as np
    import pandas as pd
    
    # 可視化
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import seaborn as sns
    from IPython.display import display
    %matplotlib inline
    sns.set_style('whitegrid')
    
    # 正規化のためのクラス
    from sklearn.preprocessing import StandardScaler
    
    # k-means法に必要なものをインポート
    from sklearn.cluster import KMeans
    
    첫 번째 필요한 총서 목록.
    이번에는 아이리스의 데이터로 실현하고 싶습니다.
    # irisデータ
    from sklearn.datasets import load_iris
    
    # データ読み込み
    iris = load_iris()
    iris.keys()
    
    # データフレームに格納
    df_iris = pd.DataFrame(iris.data, columns=iris.feature_names)
    df_iris['target'] = iris.target # アヤメの種類(正解ラベル)
    df_iris.head()
    
    # 2変数の散布図(正解ラベルで色分け)
    plt.scatter(df_iris['petal length (cm)'], df_iris['petal width (cm)'], c=df_iris.target, cmap=mpl.cm.jet)
    plt.xlabel('petal_length')
    plt.ylabel('petal_width')
    

    'petal length'와'petal width'두 변수를 시각화했다.
    다음은 산포도 행렬을 통해 가시화하고 싶습니다.
    # 散布図行列(正解ラベルで色分け)
    sns.pairplot(df_iris, hue='target', height=1.5)
    

    다음은 엘보법으로 집단의 수를 결정하고 싶어요.아이리스의 데이터는 3개로 나뉘어 명확하지만 실제 집합을 사용할 때 교사의 학습이 없기 위해 집합수를 스스로 결정해야 한다.따라서 집합 수량을 결정하는 방법 중 하나는 예일파법이다.
    # Elbow Method
    wcss = []
    
    for i in range(1, 10):
        kmeans = KMeans(n_clusters = i, init = 'k-means++', max_iter = 300, n_init = 30, random_state = 0)
        kmeans.fit(df_iris.iloc[:, 2:4])
        wcss.append(kmeans.inertia_)
    
    
    plt.plot(range(1, 10), wcss)
    plt.title('The elbow method')
    plt.xlabel('Number of clusters')
    plt.ylabel('WCSS') 
    plt.show()
    

    예일포법의 결과를 보고 집단수를 3개 이상 늘려도 의미가 없다는 것을 알고 싶다.
    나는 여기서부터 스타일링을 하고 싶다.
    # モデリング
    clf = KMeans(n_clusters=3, random_state=1)
    clf.fit(df_iris.iloc[:, 2:4])
    
    # 学習データのクラスタ番号
    clf.labels_
    
    # 未知データに対してクラスタ番号を付与
    # 今回は学習データに対して予測しているので、`clf.labels_` と同じ結果
    y_pred = clf.predict(df_iris.iloc[:, 2:4])
    y_pred
    
    # 実際の種類とクラスタリングの結果を比較
    fig, (ax1, ax2) = plt.subplots(figsize=(16, 4), ncols=2)
    
    # 実際の種類の分布
    ax1.scatter(df_iris['petal length (cm)'], df_iris['petal width (cm)'], c=df_iris.target, cmap=mpl.cm.jet)
    ax1.set_xlabel('petal_length')
    ax1.set_ylabel('petal_width')
    ax1.set_title('Actual')
    # クラスター分析で分類されたクラスタの分布
    ax2.scatter(df_iris['petal length (cm)'], df_iris['petal width (cm)'], c=y_pred, cmap=mpl.cm.jet)
    ax2.set_xlabel('petal_length')
    ax2.set_ylabel('petal_width')
    ax2.set_title('Predict')
    

    최후


    끝까지 읽어주셔서 감사합니다.
    이번에 K-means법이 시행되었다.
    수정 요청이 있으면 연락 주세요.

    좋은 웹페이지 즐겨찾기