用matlab实现感知机学习算法,训练分类器并解决井字游戏
生活随笔
收集整理的這篇文章主要介紹了
用matlab实现感知机学习算法,训练分类器并解决井字游戏
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
問題描述:
附件中包含的數(shù)據(jù)是傳統(tǒng)游戲過三關(guān)(tic-tac-toe)的900余種棋局, 目的是要通過統(tǒng)計(jì)學(xué)習(xí)的方法讓機(jī)器自動判別出勝負(fù)。數(shù)據(jù)文件中, 玩家是'x',對手是'o',每行數(shù)據(jù)包含3*3九宮格的布局情況('x'代表玩家棋子的位置, 'o'代表對手棋子的位置, 'b'代表空格), ?'positive'代表玩家贏, 'negative代表玩家負(fù)。整個問題可以看做是一個輸入特征為9維的二分類問題。
樣本數(shù)據(jù)digitdata2.txt文件中,×是1,o是-1,b是0,positive是1,negative是-1。 1-250個是第一類,251-500個是第二類,利用前500個樣本訓(xùn)練分類器,剩下458個樣本做測試
(1)權(quán)向量設(shè)為w,初始值隨機(jī)生成,滿足: ? (2)代價函數(shù)為J(w): 其中,δ是符號系數(shù),x為第一類時δ是-1,x為第二類時δ是1,以保證代價函數(shù)為正。Y是分錯類的樣本的集合。 ? (3)利用梯度下降進(jìn)行迭代: 化簡后是: 其中ρ是每次下降的步長
(4)不斷更新權(quán)向量w值,同時計(jì)算代價函數(shù)J(w),直到代價函數(shù)值為0,迭代結(jié)束。 此時的權(quán)向量w即為所求。利用w和測試樣本x相乘,結(jié)果為正屬第一類,結(jié)果為負(fù)屬第二類。 由于隨機(jī)初始化的權(quán)向量w不同,各次運(yùn)行結(jié)果有所不同。 ? matlab代碼如下: [html]?view plain?copy ? function?ganzhiji()?? %利用感知機(jī)學(xué)習(xí)算法訓(xùn)練分類器解決tic?tac?toe游戲問題?? %樣本數(shù)據(jù)digitdata2.txt文件中,×是1,o是-1,b是0,positive是1,negative是-1?? %樣本數(shù)據(jù)順序進(jìn)行了調(diào)整,1-250個是第一類,251-500個是第二類?? %利用前500個樣本訓(xùn)練分類器,剩下458個樣本做測試?? %digitdata中,×是1,o是2,b是3,positive是1,negative是-1?? ?? A?=?importdata('digitdata2.txt');%導(dǎo)入樣本數(shù)據(jù)為一個958行10列的矩陣?? %A?=?importdata('digitdata.txt');%導(dǎo)入樣本數(shù)據(jù)為一個958行10列的矩陣?? %A?=?importdata('littledata.txt');%少量數(shù)據(jù),調(diào)試用?? ?? %?B保存剩下用來測試的樣本?? for?i?=?501:958?? ????B(i-500,:)?=?A(i,:);?? end?? ?? %將矩陣A的第10列置為1,得到每個樣本的增廣向量?? for?i?=?1:958?? ????A(i,10)?=?1;?? end?? %disp(A);?? ?? %初始化一些參數(shù)?? w?=?rand(10,1);%初始權(quán)向量,10維列向量?? %disp(w);?? p?=?1;%梯度下降的步長?? ox1?=?-1;%符號系數(shù),保證代價函數(shù)大于0?? ox2?=?1;?? s?=?1;%迭代標(biāo)志位?? n?=?0;%迭代次數(shù)?? w1?=?[0?0?0?0?0?0?0?0?0?0]';%10維列向量,臨時權(quán)向量?? %disp(w1);?? ?? %迭代過程?? while?s?? ????J?=?0;%代價函數(shù)的初值?? ????j?=?[0?0?0?0?0?0?0?0?0?0]';%用于每次迭代過程中臨時累加下降量?? ????%for?i?=?1:5?? ????for?i?=?1:250??%第一類樣本?? ????????if(?A(i,:)*w?>0?)%x屬于第一類且w'x>0,分類正確?? ????????????w1?=?w;%權(quán)向量不變?? ????????else?%分類錯誤?? ????????????j?=?j?+?ox1?*?A(i,:)';%累加下降量?? ????????????J?=?J?+?ox1?*?A(i,:)?*?w;%更新代價函數(shù)?? ????????end?? ????end?? ????%for?i?=?6:10?? ????for?i?=?251:500?%第二類樣本?? ????????if(?A(i,:)*w?<0?)%x屬于第二類且w'x<0,分類正確?? ????????????w1?=?w;%權(quán)向量不變?? ????????else?%分類錯誤?? ????????????j?=?j?+?ox2?*?A(i,:)';%累加下降量?? ????????????J?=?J?+?ox2?*?A(i,:)?*?w;%更新代價函數(shù)?? ????????end?? ????end?? ????if?J==0?%代價函數(shù)為0,即沒有錯分的樣本了?? ????????s?=?0;%迭代終止?? ????????disp('迭代終止');?? ????else??? ????????w1?=?w?-?p*j;%得到新的權(quán)向量?? ????????p?=?p?+?0.1;%增加步長?? ????????n?=?n?+?1;?? ????????%disp(n);?? ????????%disp(J);?? ????end?? ????w?=?w1;%將臨時權(quán)向量w1賦值給w?? end?%while?s?? disp('迭代次數(shù):');disp(n);%輸出迭代次數(shù)?? disp('權(quán)向量:');w%輸出權(quán)向量?? ?? %迭代結(jié)束后,w即為所得最優(yōu)分類面?? count?=?0;%測試樣本分類正確的個數(shù)?? for?i?=?501:958?? ????if(?A(i,:)?*?w?>0?)?%第一類?? ????????B(i-500,11)?=?1;?? ????????if(?B(i-500,10)?==?1?)?%分類正確?? ????????????count?=?count?+?1;?? ????????end?? ????else??%第二類?? ????????B(i-500,11)?=?-1;?? ????????if(?B(i-500,10)?==?-1?)?%分類正確?? ????????????count?=?count?+?1;?? ????????end?? ????end?? end?? %disp(B);?? disp('正確率:');?? disp(count/458);%輸出正確率?? ?? end?%function?ganzhiji()??
?matlab源文件及樣本數(shù)據(jù)下載:http://download.csdn.net/detail/masikkk/4747593
from:?http://blog.csdn.net/masibuaa/article/details/8163750
樣本數(shù)據(jù)digitdata2.txt文件中,×是1,o是-1,b是0,positive是1,negative是-1。 1-250個是第一類,251-500個是第二類,利用前500個樣本訓(xùn)練分類器,剩下458個樣本做測試
(1)權(quán)向量設(shè)為w,初始值隨機(jī)生成,滿足: ? (2)代價函數(shù)為J(w): 其中,δ是符號系數(shù),x為第一類時δ是-1,x為第二類時δ是1,以保證代價函數(shù)為正。Y是分錯類的樣本的集合。 ? (3)利用梯度下降進(jìn)行迭代: 化簡后是: 其中ρ是每次下降的步長
(4)不斷更新權(quán)向量w值,同時計(jì)算代價函數(shù)J(w),直到代價函數(shù)值為0,迭代結(jié)束。 此時的權(quán)向量w即為所求。利用w和測試樣本x相乘,結(jié)果為正屬第一類,結(jié)果為負(fù)屬第二類。 由于隨機(jī)初始化的權(quán)向量w不同,各次運(yùn)行結(jié)果有所不同。 ? matlab代碼如下: [html]?view plain?copy ?
?matlab源文件及樣本數(shù)據(jù)下載:http://download.csdn.net/detail/masikkk/4747593
from:?http://blog.csdn.net/masibuaa/article/details/8163750
總結(jié)
以上是生活随笔為你收集整理的用matlab实现感知机学习算法,训练分类器并解决井字游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的记单词方法
- 下一篇: google map Api接口整理