下面是使用knn演算法來做的。資料均是由前面的程式生成的。
做完這個之後,就是將每一步整合起來。然後再盡可能的優化,使得程式效率更好。
然後可以嘗試不同的特徵選擇演算法和分類演算法,當然最後要是能有自己的一些小小改進就好了。
不過至少有了乙個還可以的結果了。。。
#include#include#include#include#include#includeusing namespace std;
typedef std::map> string2vector;
#define len 1000
#define m 100
double y[len],x;
vectortmpx;
vector> knn;
int myknn[8];
int artnum[9];
double trainset[3905][1000];
bool cmp(const pair& m1, const pair& m2)
/*516 447 471 492 491 488 500 498
*/int main()
cnt++;
}cout
ans = val/(sqrt(r1)*sqrt(r2));
knn.push_back(make_pair(k,ans));
}//cout<= 0 && w < 516)
myknn[0]++;
else if(w >= 516 && w < 963)
myknn[1]++;
else if(w >= 963 && w < 1434)
myknn[2]++;
else if(w >= 1434 && w < 1926)
myknn[3]++;
else if(w >= 1926 && w < 2417)
myknn[4]++;
else if(w >= 2417 && w < 2905)
myknn[5]++;
else if(w >= 2905 && w < 3405)
myknn[6]++;
else
myknn[7]++;
}int flag = 0;
int tmp = 0;
for(int i = 0; i < 8; i++)
}//cout<= 0 && b < 413 && flag == 0)
artnum[0]++;
else if (b >= 413 && b < 762 && flag == 1)
artnum[1]++;
else if (b >= 762 && b < 1124 && flag == 2)
artnum[2]++;
else if (b >= 1124 && b < 1515 && flag == 3)
artnum[3]++;
else if (b >= 1515 && b < 1917 && flag == 4)
artnum[4]++;
else if (b >= 1917 && b < 2316 && flag == 5)
artnum[5]++;
else if (b >= 2316 && b < 2716 && flag == 6)
artnum[6]++;
else if(b >= 2716 && b < 3117 && flag == 7)
artnum[7]++;
else
artnum[8]++;
knn.clear();
//break;
}for(int i = 0; i <= 8; i++)// 413 349 362 391 402 399 400 401
system("pause");
return 0;
}
最後結果有點出乎意料:
文字分類 libsvm
關於 libsvm 的介紹以及相關 網上很多,感興趣可以找找。這是libsvm 這裡主要是針對之前學習過的幾種特徵篩選演算法用 libsvm 進行比較。採用搜狗實驗室的資料,選擇商業類文字 1001 篇,娛樂類文字 1208 篇,測試集 29904 篇。分別採用文件頻次,卡方分布,互資訊,資訊增益來...
文字分類概論
通過新增特定規則做分類任務,費時費力,覆蓋的範圍和準確率都非常有限。維護停用詞表 包括高頻的代詞連詞介詞等 特徵提取過程中刪除停用表 現的詞等 1.詞袋模型 one hot編碼 缺點 高緯度 高稀疏 無法編碼上下文的關聯資訊,無法表達語義資訊。2.向量空間模型 通過特徵選擇降低維度,特徵權重計算增加...
文字分類知識
文字分類是在預定義的分類體系下,根據文字的特徵 內容和屬性 將給定文字與乙個或者多個類別相關聯的過程。最終目的是找到乙個有效的對映函式,將輸入的視覺化文字對映為預定義分類體系下的乙個或者多個類別。因此,文字分類有兩個關鍵問題 乙個是文字的表示,另乙個就是分類器的設計。輸入文件 預處理 文字表示 分類...