我有一個分類系統,我不幸需要爲工作原因模糊。假設我們有5個特徵來考慮,它基本上是一組規則:聚合自動生成的特徵向量
A B C D E Result
1 2 b 5 3 X
1 2 c 5 4 X
1 2 e 5 2 X
我們拍攝對象並獲取其值A-E,然後嘗試在序列匹配的規則。如果一個匹配,我們返回第一個結果。
C是一個離散的值,它可以是任意的a-e。其餘的只是整數。
該規則集已經從我們的舊系統自動生成,並且有大量的規則(約2500萬)。舊規則是if語句,例如
result("X") if $A >= 1 && $A <= 10 && $C eq 'A';
正如您所看到的,舊規則通常甚至不使用某些功能或接受範圍。有些人更煩人:
result("Y") if ($A == 1 && $B == 2) || ($A == 2 && $B == 4);
規則集需要是因爲它是人類維持小很多,所以我想縮小規則集,因此第一個例子將成爲:
A B C D E Result
1 2 bce 5 2-4 X
結果是我們可以通過結果列拆分規則集並獨立收縮。但是,我想不出一個簡單的方法來識別和縮小規則集。我試過聚類算法,但它們因爲某些數據是離散的而窒息,並將其視爲連續的並不完美。又如:
A B C Result
1 2 a X
1 2 b X
(repeat a few hundred times)
2 4 a X
2 4 b X
(ditto)
在理想情況下,這將是兩個規則:
A B C Result
1 2 * X
2 4 * X
即:不僅將所述算法標識A和B之間的關係,而且也將推斷是c是噪音(不重要的規則)
有沒有人有如何去解決這個問題的想法?任何語言或圖書館都是公平的遊戲,因爲我認爲這是一個大多數一次性的過程。提前致謝。
你確定你的第一個例子是正確的嗎?據我所知,「1 2 5 5 4 X」將意味着例如「1 2 b 5 2」意味着X,這不是原始規則集所隱含的。 – Sami 2010-01-19 19:24:37