機械学習の具体的手法
G検定のk-means法と主成分分析
G検定のシラバスには、機械学習の代表的な手法として、k-means法と主成分分析(PCA)が並んでいます。どちらも正解ラベルを使わない教師なし学習です。覚えるのは、k-means法が「グループに分ける」手法で、主成分分析が「変数の数を減らす」手法だという違いです。
このページは、6個の数値でk-means法を最後まで計算し、2つの変数で主成分分析の寄与率を計算して、違いを数字で確かめます。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-10-02。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- k-means法 = グループの数Kを先に決め、「近い重心への割り当て」と「重心の更新」を繰り返す
- 重心 = 各グループの平均で、データの点とは限らない
- k-means法が小さくしていくもの = 各点と所属グループの重心との距離の2乗和
- 主成分分析 = データのばらつき(分散)が最大になる方向を軸にとり直す次元削減
- 寄与率 = 各主成分の分散が全体の分散に占める割合で、全部足すと1
k-means法の計算
scikit-learnの公式ドキュメントは、k-means法のアルゴリズムを3つの手順で説明しています。最初に初期の重心を選び、そのあと、各データを最も近い重心に割り当てる手順と、割り当てたデータの平均で新しい重心をつくる手順を、重心がほとんど動かなくなるまで繰り返します。
1次元のデータ 1、2、4、9、10、12 を、K=2で分けます。初期の重心はデータから1と4を選びます(説明用の架空の例です)。
| 手順 | グループ1 | グループ2 | 補足 |
|---|---|---|---|
| 初期の重心 | 1 | 4 | データから2点を選ぶ(1と4) |
| 1回目の割り当て | {1, 2} | {4, 9, 10, 12} | 各点を近い重心に振り分ける |
| 1回目の更新 | 1.5 | 8.75 | 各グループの平均が新しい重心 |
| 2回目の割り当て | {1, 2, 4} | {9, 10, 12} | 4は1.5までの距離2.5、8.75まで4.75なので移る |
| 2回目の更新 | 約2.33 | 約10.33 | 3回目の割り当ては変わらず、ここで止まる |
1回目の割り当てで別のグループだった4が、重心の更新のあとに移ります。割り当てを1回で終えずに繰り返す理由は、重心が動くと、近い重心が入れ替わる点が出るからです。公式ドキュメントは、重心は一般にデータの点そのものではないとも述べています。この例の約2.33と約10.33も、データの点ではありません。2つのグループを階層的に作る方法との違いはk-means法と階層的クラスタリングの違いのページで、用語はk-means法の用語集にあります。
距離の2乗和の変化
公式ドキュメントによると、k-means法は、各点と所属グループの重心との距離の2乗を全部足した値(inertia、グループ内平方和)が小さくなる重心を選びます。この例で、更新のたびに値を計算します。
| 時点 | 計算(各点と重心の差の2乗) | 合計 |
|---|---|---|
| 1回目の更新後(重心1.5と8.75) | 0.25+0.25 + (22.5625+0.0625+1.5625+10.5625) | 35.25 |
| 2回目の更新後(重心約2.33と約10.33) | 約4.67 + 約4.67(合計は28÷3) | 約9.33 |
繰り返すたびに、距離の2乗和が35.25から約9.33へ下がります。公式ドキュメントは、この値には欠点もあると述べています。グループが凸で丸い形であると仮定しているため、細長いグループや不規則な形には向きません。また、0に近いほど良いとは言えても、基準化された指標ではありません。
主成分分析の計算
scikit-learnの公式ドキュメントは、主成分分析を、多変量データを、分散を最大限に説明する直交する成分に分解する手法と説明しています。入力は各変数の平均を引いて中心に置かれますが、ばらつきの大きさ(スケール)はそろえません。
変数xとyの分散がそれぞれ4と3、共分散が2のデータを考えます(説明用の架空の値)。分散の合計は4+3=7です。共分散行列の固有値は、(7±√17)÷2 と計算でき、約5.562と約1.438になります。
| 主成分 | 固有値(その軸の分散) | 寄与率 | 軸の向き |
|---|---|---|---|
| 第1主成分 | 約5.562 | 5.562÷7≒0.795 | (0.788, 0.615) |
| 第2主成分 | 約1.438 | 1.438÷7≒0.205 | (0.615, −0.788) |
第1主成分だけで、全体の分散7のうち約79.5%を説明します。2つの変数を第1主成分の1つだけに減らしても、ばらつきの約8割が残る計算です。公式ドキュメントは、固有値は共分散行列の固有値に等しく、成分は分散の大きい順に並ぶこと、成分の数を指定しなければ寄与率の合計が1になることを述べています。2つの軸が直交することも、表の2つの向きの内積 0.788×0.615+0.615×(−0.788)=0 で確かめられます。用語は主成分分析と次元削減の用語集にあります。
2つの手法の対応表
2つの手法の違いを表にします。表はこのページでの整理です。
| 観点 | k-means法 | 主成分分析 |
|---|---|---|
| 目的 | データをK個のグループに分ける | 変数の数を減らす(次元削減) |
| 最初に決めるもの | グループの数K | 残す主成分の数 |
| 計算の中身 | 割り当てと重心の更新を繰り返す | 共分散行列の固有値と固有ベクトル |
| 出力 | 各データの所属グループ | 新しい軸への座標と、各軸の寄与率 |
| 正解ラベル | 使わない | 使わない |
「グループに分ける」ならk-means法、「変数を減らす」なら主成分分析と、目的で引き分けます。2つの違いは主成分分析とクラスタリングの違いのページ、教師ありとの違いは教師あり学習と教師なし学習の違いのページにあります。
間違えやすい点
取り違えを、このページの例で4つ挙げます。
- k-means法に正解ラベルが要るとする: 例のデータ1〜12にラベルはなく、距離だけでグループを作りました。
- 重心をデータの点とする: 例の重心約2.33はデータの点ではありません。
- Kを自動で決まるとする: 公式ドキュメントは、グループの数を指定する必要があると述べています。
- 寄与率の合計を第1主成分だけで1とする: 例では0.795+0.205で、全成分を足して1です。
「Kを指定」「重心」はk-means法、「分散を最大にする軸」「寄与率」は主成分分析と、語から手法を引けるようにします。
問題文から読み取る
問題文の言い回しから、手法を選べます。このページの整理から導いた読み方で、出題を予想するものではありません。
- 「グループの数を先に決め、重心を更新する」とあれば、k-means法
- 「各点を最も近い重心に割り当てる」とあれば、k-means法の割り当ての手順
- 「分散が最大になる方向に新しい軸をとる」とあれば、主成分分析
- 「元の変数の数を減らして、データの本質を保つ」とあれば、次元削減(主成分分析)
- 「正解ラベルを使わず、データの構造を見つける」とあれば、教師なし学習
G検定の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
k-means法で、グループの数Kはどう決めますか?
scikit-learnの公式ドキュメントは、k-meansはグループの数を指定する必要があると述べています。Kを自動では決めないため、人が先に決めます。公式ドキュメントはKの選び方の例として、シルエット分析を使った例題も挙げています。
k-means法で、重心はデータの点ですか?
公式ドキュメントは、重心(centroid)は各グループの平均で、一般にはデータの点そのものではないと説明しています。このページの例でも、重心の約2.33はどのデータ点とも一致しません。
主成分分析で、寄与率の合計はいくつになりますか?
主成分をすべて残すと、寄与率の合計は1になります。scikit-learnのPCAは、成分の数を指定しないと全成分を保持し、寄与率(explained_variance_ratio_)の合計は1.0に等しいと説明しています。このページの例でも0.795+0.205=1です。
主成分分析とk-means法は、組み合わせて使えますか?
使えます。公式ドキュメントは、次元が高いとユークリッド距離が膨らむ(次元の呪いの一例)ため、k-meansの前にPCAなどで次元を減らすと、問題を和らげて計算も速くなると述べています。
