Verticaでは、機械学習のクラスタリングアルゴリズムとしてk-means(k平均法)を利用できます。

k-meansとは

k-meansは、機械学習における教師なし学習で、クラスタリングを行う際に利用されます。

k-meansの利用例は以下の通りです。
・特性に基づいた類似顧客のグルーピング
・スパム検出
・サイバーセキュリティ(不正検知等)

以降では、サンプルデータを例にVerticaでk-meansを利用する手順をご紹介します。

Verticaでk-meansを利用する手順

サンプルスキーマ、データのダウンロード

以下URLよりサンプルファイルをダウンロードします。
https://github.com/vertica/Machine-Learning-Examples

画面右上にある「Clone or Download」をクリックします。


展開される画面の右下にある「Download ZIP」をクリックしてファイルを保存します。



サンプルスキーマの作成、データのロード

ダウンロードしたファイルをVerticaサーバ上の任意のディレクトリに転送します。
転送後、以下コマンドでファイルを解凍します。


解凍後に以下コマンドでサンプルスキーマとテーブルの作成、データロードを実行します。


k-meansモデルの作成

本記事ではk-meansのサンプルデータとしてよく用いられるirisデータを使用します。
irisデータには「あやめ」の3品種「setosa」、「versicolor」、「virginica」のSepal(がく片)の長さと幅、及びPetal(花びら)の長さと幅の情報が含まれています。



Sepal(がく片)の長さと幅、及びPetal(花びら)の長さと幅の情報を用いて機械学習を行い、学習データから花の品種を予測するクラスタリングを行います。

サンプルデータセットでは、すでにirisデータを分割した学習データ(iris1)とテストデータ(iris2)が用意されています。そのため、iris1テーブルを用いてk-meansによる機械学習を行います。
※k-meansはランダム要素があるため、本記事と同じようにSQLを実行しても同様の結果にならない場合があります。

k-meansによる機械学習を行うには、KMEANS関数を利用します。


【参考】パラメータの意味

パラメータ名意味
myKmeansModel任意のモデル名
iris1学習データのテーブル名
*予測に使用する説明変数(*の場合は全ての列)
3作成したいクラスタの数、花の品種は3種類なので3を指定
max_iterations(オプション) アルゴリズムが実行する最大反復回数
output_view(オプション) 学習データのクラスタリング結果を保存するビュー名
key_columns(オプション) output_viewオプションを利用する場合の主キーとなる列 
exclude_columns(オプション) 予測列を*(全列)と指定した場合に、予測列から除外する列


サマリを出力

作成したmyKmeansModelモデルのサマリ情報を確認します。


作成したモデルの評価

学習データ(iris1)がどのようにクラスタリングされたかを確認します。

★のデータについては、間違ったクラスタリングを行っていますが、それ以外は期待したクラスタリングが行われていることが確認できます。今回は以下のようにクラスタリングされました。

品種
0setosa
1virginica
2versicolor


次に、学習時に利用していないテストデータ(iris2)を利用して、作成したモデルの精度を評価します。
モデルの評価はAPPLY_KMEANS関数を利用します。

★のデータについては、間違ったクラスタリングを行っていますが、それ以外は期待したクラスタリングが行われていることが確認できます。

【参考】APPLY_KMEANS関数のパラメータの意味

パラメータ名意味
sepal_length,sepal_width,petal_length,petal_width予測に使用する列(モデル作成時に指定した説明変数)
MODEL_NAME予測に使用するモデル名


実装

作成したk-meansモデルを実装する場合も、評価時に利用したAPPLY_KMEANS関数を利用できます。


参考情報

Clustering Data Using k-means
https://my.vertica.com/docs/9.0.x/HTML/index.htm#Authoring/AnalyzingData/MachineLearning/Kmeans/ClusteringDataUsingkmeans.htm

検証バージョンについて

この記事の内容はVertica 9.0で確認しています。