2017-02-24 1 views
0

トレーニング中に表示されず、テストデータのみを含む新しいデータをクラスタリングしようとしています。トレーニングファイルには5つのクラスがあり、テストデータには7つのクラス(5 + 2)があり、2つは新しいクラスです。今、k-meanを実行して、新しいクラスを追加するための適切なクラスターを見つけたり、クラスターに近くないクラスターに対して新しいクラスターを作成したりします。異なるクラスタリングラベル

これは私のコードの一部です:

print("Reading training data...") 
 
#mydata = pd.read_csv('.\KDDTrain.csv', header=0) 
 
mydata = pd.read_csv('.\PTraining.csv', header=0) 
 

 
# select all but the last column as data 
 
X_train = mydata.ix[1:, :-1] 
 
X_train = np.array(X_train) 
 
n_samples, n_features = np.shape(X_train) 
 
# print np.shape(X_train) 
 

 
# select last column as target/class 
 
y_train = mydata.ix[1:, n_features] 
 
y_train = np.array(y_train) 
 

 
# encode target labels with numeric values from 0 to no of classes 
 
# print "Encoding class labels..." 
 
from sklearn import preprocessing 
 

 
label_encoder = preprocessing.LabelEncoder() 
 
label_encoder.fit(y_train) 
 
# print list(label_encoder.classes_) 
 
# print 'total no of classes in dataset=' + str(len(label_encoder.classes_)) 
 
y_train = label_encoder.transform(y_train) 
 

 
# n_samples, n_features = data.shape 
 
n_digits = len(np.unique(y_train)) 
 

 
print("Training data statistics") 
 
print("n_attack_catagories: %d, \t n_samples %d, \t n_features %d" 
 
     % (n_digits, n_samples, n_features)) 
 

 
sample_size = 300 
 

 
# Read test data 
 
mytestdata = pd.read_csv('.\KDDTest+.csv', header=0) 
 

 
print("Reading test data...") 
 
# select all but the last column as data 
 
X_test = mytestdata.ix[1:, :-1] 
 
X_test = np.array(X_test) 
 
# print np.shape(X_test) 
 

 
# select last column as target/class 
 
y_test = mytestdata.ix[1:, n_features] 
 
# print "actual labels" 
 
# print y_test 
 
y_test = label_encoder.transform(y_test) 
 
# print "Encoded labels" 
 
# print y_test 
 
y_test = np.array(y_test) 
 

 
n_samples_test, n_features_test = np.shape(X_test) 
 
n_digits_test = len(np.unique(y_test)) 
 
print("Test data statistics") 
 
print("n_attack_catagories: %d, \t n_samples %d, \t n_features %d" 
 
     % (n_digits_test, n_samples_test, n_features_test)) 
 

 
print(79 * '_')
と今、このエラーに

File "C:/Users/aalsham4/PycharmProjects/clusteringtask/clustering.py", line 87, in <module> 
 
    y_test = label_encoder.transform(y_test) 
 
    File "C:\Users\aalsham4\AppData\Local\Continuum\Miniconda3\lib\site-packages\sklearn\preprocessing\label.py", line 153, in transform 
 
    raise ValueError("y contains new labels: %s" % str(diff)) 
 
ValueError: y contains new labels: ['calss6' 'class7' ]

を与えて、私は私がやっている場合はわからないんだけどこれはラベル付きクラスを正しくクラスタリングするかどうかを決定します。 Anony-ムース@として

+0

ようこそStackOverflow。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。特に、データファイルなしで問題を再現することはできません。 – Prune

+0

私にはトレーニングデータが含まれていなければならず、別のデータにはテストデータが含まれています。テストデータファイルには7つのクラスがあり、トレーニングデータファイルには5クラスしかありません。これら2つのクラスが私のモジュールが訓練した5つのクラスのいずれかと似ているかどうかを調べるために、k-meansクラスタリングを適用したいと思います。 これは適用できますか? – Adel

+1

クラスをお持ちの場合は、k-meansではなく、クラシファイアを使用してください。あなたの問題に間違ったツール。 KDDCup99データを使用しないでください。欠陥があります。 –

答えて

0

任意の提案はすでにこの問題をkが、意味はない、と述べました。 k-手段は、あなたが望むクラスの数があれば、「自然な」グループ分けを見つけることです。これらのラベルを割り当てたら、それ以上の更新はもはやk-meansの問題ではありません。

統計解析ヒューリスティックを使用して、新しいクラスが既存のクラスと「十分に近い」かどうかを判断できます。これは、通常、平均値と偏差(k-meansクラスに対してすでに持っている)、密度、およびあなたの問題に関連するその他のものを使用します。

スペクトルクラスタリングアルゴリズムを研究し、データセット全体で試してみることをお勧めします。ギャップを見つけたり、密度に反応したりするのに適しています(このアプリケーションで選択したアルゴリズムによって異なります)。

関連する問題