0

私は現在、Ethem Alpaydinの "Introduction to machine learning"を読んでいます。最も近いセントロイド分類器を見つけて実装しようとしました。私は正しく分類子を実装したと思いますが、私はわずか68%の精度しか得ていません。だから、最も近い重心分類器自体が非効率的であるか、私の実装(下記)に何らかのエラーがありますか?最も近いセントロイド分類器は実際には効率的ではありませんか?

データセットは、それぞれが有する4つの特徴1372個のデータポイントが含まれており、 私のMATLABの実装2つの出力クラスがあります。

DATA = load("-ascii", "data.txt"); 

#DATA is 1372x5 matrix with 762 data points of class 0 and 610 data points of class 1 
#there are 4 features of each data point 
X = DATA(:,1:4); #matrix to store all features 

X0 = DATA(1:762,1:4); #matrix to store the features of class 0 
X1 = DATA(763:1372,1:4); #matrix to store the features of class 1 
X0 = X0(1:610,:); #to make sure both datasets have same size for prior probability to be equal 
Y = DATA(:,5); # to store outputs 

mean0 = sum(X0)/610; #mean of features of class 0 
mean1 = sum(X1)/610; #mean of featurs of class 1 

count = 0; 
for i = 1:1372 
    pre = 0; 
    cost1 = X(i,:)*(mean0'); #calculates the dot product of dataset with mean of features of both classes 
    cost2 = X(i,:)*(mean1'); 

    if (cost1<cost2) 
    pre = 1; 
    end 
    if pre == Y(i) 
    count = count+1; #counts the number of correctly predicted values 
    end 

end 

disp("accuracy"); #calculates the accuracy 
disp((count/1372)*100); 

答えて

0

少なくともいくつかはここにあります

  1. あなたはドットプロダクトを使用して入力スペースに類似性を割り当てている場合、これはほぼで、は有効ではありません。ドットプロダクトを使用する唯一の理由は、すべてのデータポイントが同じノルムを持つこと、またはノルムが重要ではないこと(ほぼ真実ではない)を前提とすることです。たとえそれが非常に素朴であっても、ユークリッド距離を使ってみてください - それははるかに良いはずです。

  2. は効率が悪いですか?ですか?効率の定義に依存します。それは非常に簡単で速いものですが、予測力の面ではが非常に悪いです。実際には、すでに「おもちゃのモデル」とされているNaive Bayesより悪いです。

  3. コードに何か問題がありすぎ

    X0 = DATA(1:762,1:4); #matrix to store the features of class 0 
    X1 = DATA(763:1372,1:4); #matrix to store the features of class 1 
    X0 = X0(1:610,:); #to make sure both datasets have same size for prior probability to be equal 
    

    たらサブサンプルX0、あなたは、まだ後に「テスト」あなたは両方の訓練にテストし、「X0の要素が欠け」時の1220個の訓練サンプルを持っています、確率的な観点からは、これは実際には意味をなさない。まず、訓練セットの正確さをテストするべきではありません(実際の精度を過大評価するため).2番目に、訓練データをサブサンプリングすることによって、ではなく、等しくなります。このような方法ではなく、単純に重心推定の品質を低下させているだけです。この種の技術(サブ/オーバーサンプリング)は、モデルプライヤーを実行するモデルのプライオリティを等しくします。あなたの方法はそうではありません(それは基本的に生成前のモデルであり、前の1/2の前提と同じです)。

関連する問題