<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/machinelearning/">
    <title>AIとか機械学習とか、それらのコンテストとかのwiki</title>
    <link>http://w.atwiki.jp/machinelearning/</link>
    <atom:link href="https://w.atwiki.jp/machinelearning/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>AIとか機械学習とか、それらのコンテストとかのwiki</description>

    <dc:language>ja</dc:language>
    <dc:date>2012-03-09T21:41:13+09:00</dc:date>
    <utime>1331296873</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/30.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/29.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/28.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/27.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/26.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/25.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/24.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/23.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/22.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/machinelearning/pages/21.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/30.html">
    <title>機械学習/k-mean/ソース</title>
    <link>https://w.atwiki.jp/machinelearning/pages/30.html</link>
    <description>
      //C++
#include &lt;map&gt;
#include &lt;set&gt;
#include &lt;cmath&gt;
#include &lt;stack&gt;
#include &lt;queue&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;bitset&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;string.h&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;sys/time.h&gt;
using namespace std;
#define li        long long int
#define rep(i,to) for(li i=0;i&lt;((li)(to));++i)
#define pb        push_back
#define sz(v)     ((li)(v).size())
#define bit(n)    (1ll&lt;&lt;(li)(n))
#define all(vec)  (vec).begin(),(vec).end()
#define each(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define MP        make_pair
#define F         first
#define S         second


#define MAX 40000
double X[4]={0,0,10,10};
double Y[4]={0,10,0,10};
li cluster[MAX];
pair&lt;double,double&gt; center[4];
pair&lt;double,double&gt; points[MAX];

int main(){
	rep(i,MAX) points[i]=MP(rand()%7-3.0+X[i%4],rand()%7-3.0+Y[i%4]);
	rep(i,4) center[i]=MP(rand(),rand())    </description>
    <dc:date>2012-03-09T21:41:13+09:00</dc:date>
    <utime>1331296873</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/29.html">
    <title>機械学習/k-mean</title>
    <link>https://w.atwiki.jp/machinelearning/pages/29.html</link>
    <description>
      概要はk-meansで画像をググるとよくわかる。
n次元の点をクラスタリングする。


まずn個の点を適当にクラスタリング。
１、n個の点を一番近い基準点にクラスタリングする。
２、各基準点をクラスタリングされた点の重心に移動する。
３、１に戻る。



[[ソース&gt;&gt;http://www18.atwiki.jp/machinelearning/pages/30.html]]
中心(0,0),(0,10),(10,0),(10,10)の半径5の円内に点を適当に置く。
それをクラスタリング。

&amp;link_edit(編集)    </description>
    <dc:date>2012-03-09T21:43:15+09:00</dc:date>
    <utime>1331296995</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/28.html">
    <title>機械学習/ID3/ソース</title>
    <link>https://w.atwiki.jp/machinelearning/pages/28.html</link>
    <description>
      //C++
#include &lt;map&gt;
#include &lt;set&gt;
#include &lt;cmath&gt;
#include &lt;stack&gt;
#include &lt;queue&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;bitset&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;string.h&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;sys/time.h&gt;
using namespace std;
#define li        long long int
#define rep(i,to) for(li i=0;i&lt;((li)(to));++i)
#define pb        push_back
#define sz(v)     ((li)(v).size())
#define bit(n)    (1ll&lt;&lt;(li)(n))
#define all(vec)  (vec).begin(),(vec).end()
#define each(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define MP        make_pair
#define F         first
#define S         second


string label[]={&quot;foot&quot;,&quot;eye&quot;,&quot;mouth&quot;};
string type[]={&quot;insect&quot;,&quot;non insect&quot;,&quot;alien&quot;};
li data[][4]={
{2,2,1,1},
{6,2,1,0},
{2,0,1,1},
{6,0,1,0},
{4,2,1,1},
{2,8,4,0},
{9,9,9,2}};

struct Node{
	vector&lt;pair&lt;li,Node&gt; &gt; child;
	string label;
};

Node make(vector    </description>
    <dc:date>2012-03-09T21:41:31+09:00</dc:date>
    <utime>1331296891</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/27.html">
    <title>機械学習/ID3</title>
    <link>https://w.atwiki.jp/machinelearning/pages/27.html</link>
    <description>
      教師有り学習アルゴリズム
パラメーターから属するカテゴリを判別する。


与えられたデータから決定木を作成する
原理としてはオッカムの剃刀に基づく。
つまり少ない仮定で導かれる事実は優れている。
なので情報量が多い分岐を上に持ってくればいい。
つまり分岐後の平均情報量が少なくなるようにする。
　
逐次改善が行えない。
パラメーターが連続的だと使えない。

C4.5を要勉強





[[ID3のソース&gt;&gt;http://www18.atwiki.jp/machinelearning/pages/28.html]]
入力は以下。種類を推定する
足：目：口：種類
２：２：１：虫じゃない
６：２：１：虫
２：０：１：虫じゃない
６：０：１：虫
４：２：１：虫じゃない
２：８：４：虫
９：９：９：宇宙人

答えは足-&gt;目になるはず。



&amp;link_edit(編集)    </description>
    <dc:date>2012-03-09T21:11:51+09:00</dc:date>
    <utime>1331295111</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/26.html">
    <title>機械学習/重回帰分析/多重共線性</title>
    <link>https://w.atwiki.jp/machinelearning/pages/26.html</link>
    <description>
      多重共線性

重回帰分析において関連性の高い要素が入るとバグる。

例えば理科に対する、数学と国語の関係を考える。
数学が上がると理科が上がるのは明らか。
しかし、そのせいで国語が上がると理科が下がりかねない。

この時は、数学か国語の一方を取り除けばいい。
けど、数学と国語の和と、数学と国語の差に変形してもいい。
ただ信頼性は落ちるのでサンプル数を増やす必要があるらしい。


&amp;link_edit(編集)    </description>
    <dc:date>2012-03-08T19:03:37+09:00</dc:date>
    <utime>1331201017</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/25.html">
    <title>機械学習/重回帰分析</title>
    <link>https://w.atwiki.jp/machinelearning/pages/25.html</link>
    <description>
      多次元の点が渡されるのでそれについての関係を考える
どれらがどんな感じで関係してるかを求める


関係しそうな変数を自分で決める。
線形回帰でそれらについての関数を求める。
そしてどれとどれが関係が深いかとかを調べる。


例えば 0.1*a+1*b+1000*c=z
とかだったらcとzの関係が深そう。
(2.0001&lt;c&lt;2.0002)だとしたらzに与える影響は小さい
(0&lt;a&lt;100000000)とかだったらaが支配的。
これじゃよくわからないので各変数の平均を0,分散を1にしてやる。
ただ変数を変化させるのは面倒いので係数を変更する。
cの分散をS[c],係数をw[c]としたらw&#039;[c]=w[c]*sqrt(S[c]/S[z])



&amp;link_edit(編集)    </description>
    <dc:date>2012-02-19T07:20:29+09:00</dc:date>
    <utime>1329603629</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/24.html">
    <title>機械学習/線形回帰/ソース</title>
    <link>https://w.atwiki.jp/machinelearning/pages/24.html</link>
    <description>
      //C++

#include &lt;map&gt;
#include &lt;set&gt;
#include &lt;cmath&gt;
#include &lt;stack&gt;
#include &lt;queue&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;bitset&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;string.h&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;sys/time.h&gt;
using namespace std;
#define li        long long int
#define rep(i,to) for(li i=0;i&lt;((li)(to));++i)
#define pb        push_back
#define sz(v)     ((li)(v).size())
#define bit(n)    (1ll&lt;&lt;(li)(n))
#define all(vec)  (vec).begin(),(vec).end()
#define each(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define MP        make_pair
#define F         first
#define S         second


//	p.180
//
#define MAT_TYPE double
//#define MAT_MOD 
//

class MAT{
public:
	long long int n,m;
	vector&lt;vector&lt;MAT_TYPE&gt; &gt; mat;
	
	inline MAT();
	inline MAT(int _n);
	inline MAT(int _n,int _m,int num);
	inline void print();
	inline long long int size();
	    </description>
    <dc:date>2012-02-18T11:08:29+09:00</dc:date>
    <utime>1329530909</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/23.html">
    <title>機械学習/線形回帰</title>
    <link>https://w.atwiki.jp/machinelearning/pages/23.html</link>
    <description>
      二次元の点が与えられるからそれらを通る関数を求める

与えられる点を(x,y)とする。
欲しい関数をf(a)=Σ(w[i]*a^i):[0&lt;=i&lt;n]とする。


きっと全点は通れないので大体近い関数を見つける。
何が『大体近い』かは自分で適当に決める。
Σ( (f(x)-y)*(f(x)-y) )を最小にするのが人気らしい。
なのでここではこれを最小にするw[i]:(0&lt;=i&lt;n)を求める。

各w[i]:(0&lt;=i&lt;n)において微分する。
d(Σ(f(x)-y)*(f(x)-y))/dw[i]=0となる。
これで式がn個得られるので連立方程式を解けばいい。

X[i][j]=(x[i]^j)とする
T(X)をXの転置行列とする
W=((T(X)*X)^-1)*T(X)*Y


[[線形回帰のソース&gt;&gt;http://www18.atwiki.jp/machinelearning/pages/24.html]]


&amp;link_edit(編集)    </description>
    <dc:date>2012-02-18T11:11:17+09:00</dc:date>
    <utime>1329531077</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/22.html">
    <title>機械学習/ナイーブベイズ/ソース</title>
    <link>https://w.atwiki.jp/machinelearning/pages/22.html</link>
    <description>
      //C++

#include &lt;map&gt;
#include &lt;set&gt;
#include &lt;cmath&gt;
#include &lt;stack&gt;
#include &lt;queue&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;bitset&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;string.h&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;sys/time.h&gt;
using namespace std;
#define li        long long int
#define rep(i,to) for(li i=0;i&lt;((li)(to));++i)
#define pb        push_back
#define sz(v)     ((li)(v).size())
#define bit(n)    (1ll&lt;&lt;(li)(n))
#define all(vec)  (vec).begin(),(vec).end()
#define each(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define MP        make_pair
#define F         first
#define S         second

#define MAX 2
#define RANGE 100
string name[]={&quot;even&quot;,&quot;odd &quot;};
double cnt1[MAX];
double cnt2[MAX][RANGE];

void study(){
	rep(i,10000){
		int target=rand()%2;
		int num=rand()/2*2+target;
		if(rand()%3==0) num++;
		cnt1[target]++;
		cnt2[target][num%RANGE]++;
	}    </description>
    <dc:date>2012-02-17T10:09:55+09:00</dc:date>
    <utime>1329440995</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/machinelearning/pages/21.html">
    <title>機械学習/ナイーブベイズ</title>
    <link>https://w.atwiki.jp/machinelearning/pages/21.html</link>
    <description>
      分類アルゴリズム。
各要素が独立なときに使える


カテゴリA,B,C
要素a,b,c,d,e,f,g
a,dからなる物はどのカテゴリに分類されるか。
なおaの有無はbの有無の確率に影響しない(独立)。

P(A|a,d),P(B|a,d),P(C|a,d)のうち最大のが知りたい。

P(A,a)=P(A|a)*P(a)=P(a|A)*P(A)より
P(A|a)=P(a|A)*P(A)/P(a) : P(a)は共通なのでなくていい

P(A|a,d)=P(A|a)*P(A|b)=P(a|A)*P(A)*P(d|A)*P(A) 
アンダーフローするのでlog取る。
出現回数が0だと困るので全部に1足してやればいい。



適当な集合を偶寄カテゴリに分けるプログラム。
各カテゴリは自分の数字を2:1の割合で含む教師を与えられる
[[偶奇カテゴリ分けプログラム&gt;&gt;http://www18.atwiki.jp/machinelearning/pages/22.html]]


&amp;link_edit(編集)    </description>
    <dc:date>2012-02-17T09:50:11+09:00</dc:date>
    <utime>1329439811</utime>
  </item>
  </rdf:RDF>
