过三关(tic-tac-toe)游戏的LIBSVM解决方法

一,问题描述

过三关游戏,也叫井字棋,两个游戏者,一个画圈一个画叉,最先横竖斜连成一条线的为赢。现在的问题是,已知900个棋局,如何运用机器学习的方法让计算机自动判定一个给定的棋局为赢还是为输。棋局有9格子,所以每个棋盘可以有个9维的向量表示,1表示x,-1表示圈,0表示空格,每个棋局有两种可能的状态,赢或是输,可以用1表示赢,-1表示输。

游戏的数据可以在这个网站得到:http://archive.ics.uci.edu/ml/。可以用其中的50%用于训练,其余50%用于测试。

解决的方法很多,先说SVM方法,因为有个很好用的工具LIBSVM。

二,SVM 

SVM--支持向量机,用于解决分类问题。 在解决小样本,非线性的问题中,有很好的应用。

三, LIBSVM

Libsvm是一个实现了svm算法的工具软件(http://archive.ics.uci.edu/ml/)。 下载到本地,不用安装,文件件里有个windows文件夹,里面是window下的可执行文件。

        1)数据处理。libsvm用的数据有固定的格式,而得到的棋盘数据是不能直接用的。

    要进行如下的转换:x,x,x,x,o,o,x,o,o,positive----->1 1:1 2:1 3:1 4:1 5:0 6:0 7:1 8:0 9:0

   第一个1表示这是赢局,后面9个数据对用9个特征值。 

   900多条数据,如果人工转换肯定要疯了。excel有专门的函数来进行转换,不过这个我们试过。我用的是gvim,执行几条命令也可以转换。 

        2)数据缩放

           数据一般缩放到-1到+1之间,这样处理的速度比较快。用svm-scale.exe这个执行程序。

           因为选取的数据本来就在-1到+1,所以这步可以免了。

        3)训练数据

            执行命令:svm-tain data.txt model.txt

            用数据文件data.txt里数据生成模型,保存在model.txt里。

            这个过程涉及选择核函数和选择参数的问题。 

         4)预测数据

           执行命令:svm-predict testingdata.txt model.txt output.txt

           testingdata.txt是测试数据文件,model.txt是模型文件,output.txt是结果输出文件。

四,一点总结

     对于这个问题,最好的核模型是线性核,比常用的rbf核效果好。原因可能是,svm要做的首先是数据从低维到高维的映射 ,是线性不可分的问题变为线性可分的问题,但这个问题本来就是个线性可分问题,所以没有必要映射。所以线性核就能够用,rbf核或许大才小用了,但是如果选好参数,rbf应该也能达到高的正确率。对于核模型也是不甚理解,需要更多的思考。

posted @ 2012-02-26 19:20  HOLD  阅读(517)  评论(0编辑  收藏  举报