日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

weka: best first search

發(fā)布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 weka: best first search 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ASSearch????? ?????????? 搜索算法類

ASEvaluation?? ?????????? 特征結(jié)果集評價算法類。該類有接口接受樣本輸入

AttributeEvaluation??????? 單個特征的評價類

AttributeSetEvaluation??? 特征集的評價類

AttributeSelection????????? 特征選擇類, 接受ASSearchASEvaluation作為輸入

AttributeTransformer???? 數(shù)據(jù)轉(zhuǎn)換類

?

Best First Search

m_bestMerit 記錄評價最高的得分

m_cacheSize 已評價了多少組不同的特征; lookup記錄已評價屬性集及其評價分的集合

m_searchDirection 搜索方向:正向,后向,雙向

m_starting 初始結(jié)果集

m_totalEvals 已評價次數(shù)>= m_cacheSize

?

1)??? 初始化

如果已給出初始結(jié)果集,則此輪結(jié)果集就是初始結(jié)果集;若未給出初始結(jié)果集且為雙向搜索,則此輪結(jié)果集就是所有的屬性集。

計算此輪結(jié)果集的評價得分, 將該結(jié)果集與得分放入已查數(shù)據(jù)中; 將該結(jié)果集放入待搜索隊列中

?

?

2)??? 迭代搜索

迭代退出條件是, 如果連續(xù)多次擴(kuò)展得到的結(jié)果集都沒有比當(dāng)前最好的更優(yōu),則退出,Stale < m_max_stale? 或者待擴(kuò)展隊列已為空。

2.0)取得待擴(kuò)展隊列頭

2.1)根據(jù)搜索方向擴(kuò)展該屬性集得到新的屬性集:順序掃描每個屬性,如果未處理過該屬性, 則將該屬性增加到待擴(kuò)展集中。(如果是backward搜索, 則是將該屬性從待擴(kuò)展集中移除;后面類同)

2.2)如果該新的屬性集未曾處理過, 則計算其評價分、將其增加到lookup中; 將該屬性集加入到待擴(kuò)展集中。 判斷此次擴(kuò)展是否比當(dāng)前最好的更優(yōu)、更優(yōu)則記錄相關(guān)信息。

2.3)恢復(fù)到迭代2.0)狀態(tài)時的屬性集,迭代2.1)中掃描下一個未曾處理的屬性

Notes:如果是雙向搜索時,則步驟2中,都是在步驟2.0)的基礎(chǔ)之上先正向?qū)λ袑傩宰鰷y試;然后逆向?qū)λ袑傩宰鰷y試。就是把雙向分為了先正向后逆向兩個完全分開的過程。

?

3)步驟2退出時, 得到了最佳屬性集合

?

code

while (stale < m_maxStale) {added = false;if (m_searchDirection == SELECTION_BIDIRECTIONAL) {// bi-directional searchdone = 2;sd = SELECTION_FORWARD;} else {done = 1;}// finished search?if (bfList.size() == 0) {stale = m_maxStale;break;}// copy the attribute set at the head of the listtl = bfList.getLinkAt(0);temp_group = (BitSet)(tl.getData()[0]);temp_group = (BitSet)temp_group.clone();// remove the head of the listbfList.removeLinkAt(0);// count the number of bits set (attributes)//TODO 計算temp_group中已處理過的屬性個數(shù) sizedo {for (i = 0; i < m_numAttribs; i++) {//測試第i個屬性是否已處理過。 z==true時表示未處理過、待處理if (sd == SELECTION_FORWARD) {z = ((i != m_classIndex) && (!temp_group.get(i)));} else {z = ((i != m_classIndex) && (temp_group.get(i)));}if (z) {// set the bit (attribute to add/delete)// 如果待處理, 則對正向搜索而言就是增加到屬性集中; 逆向搜索就是從屬性集中刪除if (sd == SELECTION_FORWARD) {temp_group.set(i);size++;} else {temp_group.clear(i);size--;}/* if this subset has been seen before, then it is already in the list (or has been fully expanded) *///如果該擴(kuò)展后的屬性集已見過,則取出其評價分; 未見過則處理:tt = (BitSet)temp_group.clone();hashC = tt.toString();if (lookup.containsKey(hashC) == false) {merit = ASEvaluator.evaluateSubset(temp_group);m_totalEvals++;} else {merit = ((Double)lookup.get(hashC)).doubleValue();cacheHits++; }// insert this one in the list。 增加到待擴(kuò)展集中Object[] add = new Object[1];add[0] = tt.clone();bfList.addToList(add, merit);// is this better than the best?if (sd == SELECTION_FORWARD) {z = ((merit - best_merit) > 0.00001);} else if (merit == best_merit) {z = (size < best_size);} else {z = (merit > best_merit);} }if (z) //比當(dāng)前最佳更好, 則記錄相關(guān)信息{added = true;stale = 0;best_merit = merit;best_size = size;best_group = (BitSet)(temp_group.clone());}// unset this addition(deletion)//重置當(dāng)前選擇, 以便進(jìn)行下一個屬性測試if (sd == SELECTION_FORWARD) {temp_group.clear(i);size--;} else {temp_group.set(i);size++;}}end forif (done == 2) {sd = SELECTION_BACKWARD;}done--;} while (done > 0); ///end do/* if we haven't added a new attribute subset then full expansion of this node hasen't resulted in anything better */if (!added) {stale++;}}///end whilem_bestMerit = best_merit;return attributeList(best_group);

總結(jié)

以上是生活随笔為你收集整理的weka: best first search的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。