9

KDD 1999 カップ データセットから取得したデータをクラスター化しようとしています。

ファイルからの出力は次のようになります。

0,tcp,http,SF,239,486,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0.00,0.00,0.00,0.00,1.00,0.00,0.00,19,19,1.00,0.00,0.05,0.00,0.00,0.00,0.00,0.00,normal.

その形式で48,000の異なるレコードがあります。データをクリーンアップし、数字だけを残してテキストを削除しました。出力は次のようになります。

ここに画像の説明を入力

Excel でコンマ区切りファイルを作成し、csv ファイルとして保存してから、matlab で csv ファイルからデータ ソースを作成しました。matlab の fcm ツールボックスを使用して実行しようとしました (findcluster は、38 列で予想される 38 のデータ型を出力します)。

ただし、クラスターはクラスターのように見えないか、必要な方法で受け入れて動作していません。

クラスターを見つけるのを手伝ってくれる人はいますか? 私はmatlabが初めてなので、経験がなく、クラスタリングも初めてです。

メソッド:

  1. 選択したクラスター数 (K)
  2. 重心の初期化 (データセットからランダムに選択された K パターン)
  3. 最も近い重心を持つクラスターに各パターンを割り当てます
  4. 各クラスターの平均を計算して、その新しい重心にします
  5. 停止基準が満たされるまでステップ 3 を繰り返します (パターンが別のクラスターに移動しない)。

これは私が達成しようとしているものです:

ここに画像の説明を入力

これは私が得ているものです:

ここに画像の説明を入力

load kddcup1.dat
plot(kddcup1(:,1),kddcup1(:,2),'o')  
[center,U,objFcn] = fcm(kddcup1,2);
Iteration count = 1, obj. fcn = 253224062681230720.000000
Iteration count = 2, obj. fcn = 241493132059137410.000000
Iteration count = 3, obj. fcn = 241484544542298110.000000
Iteration count = 4, obj. fcn = 241439204971005280.000000
Iteration count = 5, obj. fcn = 241090628742523840.000000
Iteration count = 6, obj. fcn = 239363408546874750.000000
Iteration count = 7, obj. fcn = 238580863900727680.000000
Iteration count = 8, obj. fcn = 238346826370420990.000000
Iteration count = 9, obj. fcn = 237617756429912510.000000
Iteration count = 10, obj. fcn = 226364785036628320.000000
Iteration count = 11, obj. fcn = 94590774984961184.000000
Iteration count = 12, obj. fcn = 2220521449216102.500000
Iteration count = 13, obj. fcn = 2220521273191876.200000
Iteration count = 14, obj. fcn = 2220521273191876.700000
Iteration count = 15, obj. fcn = 2220521273191876.700000

figure
plot(objFcn)
title('Objective Function Values')
xlabel('Iteration Count')
ylabel('Objective Function Value')

    maxU = max(U);
    index1 = find(U(1, :) == maxU);
    index2 = find(U(2, :) == maxU);
    figure
    line(kddcup1(index1, 1), kddcup1(index1, 2), 'linestyle',...
    'none','marker', 'o','color','g');
    line(kddcup1(index2,1),kddcup1(index2,2),'linestyle',...
    'none','marker', 'x','color','r');
    hold on
    plot(center(1,1),center(1,2),'ko','markersize',15,'LineWidth',2)
    plot(center(2,1),center(2,2),'kx','markersize',15,'LineWidth',2)
4

1 に答える 1

12

機械学習やデータマイニングは初めてなので、このような高度な問題に取り組むべきではありません。何しろ、あなたが扱っているデータは大会 (KDD Cup'99) で使用されたものなので、簡単であるとは思わないでください。

さらに、データは分類タスク (教師あり学習) を目的としており、目標は正しいクラス (悪い/良い接続) を予測することです。あなたはクラスタリング (教師なし学習) に興味を持っているようですが、これは一般的により困難です。

この種のデータセットには、多くの前処理と巧妙な特徴抽出が必要です。通常、人々はドメイン知識 (ネットワーク侵入検知) を使用して、生データからより優れた機能を取得します。K-means などの単純なアルゴリズムを直接適用すると、一般に悪い結果が得られます。

手始めに、属性を同じスケールになるように正規化する必要があります。方法のステップ 3 の一部としてユークリッド距離を計算する場合、239やなどの値を持つフィーチャは、 など486の小さな値を持つ他のフィーチャよりも優位に0.05立つため、結果。

覚えておくべきもう 1 つのポイントは、属性が多すぎると悪いことになる可能性があることです (次元の呪い)。したがって、特徴選択または次元削減の手法を検討する必要があります。

最後に、より単純なデータセットに慣れることをお勧めします...

于 2011-10-11T04:44:13.083 に答える