机器学习2

来源:互联网 发布:qihoo360 apk脱壳软件 编辑:程序博客网 时间:2024/06/03 15:58

以下为学习记录,以备忘记

=============================================

学习要做什么,怎么做呢?


天地之间,一气而己。惟有动静,遂分阴阳。

有老少,遂分四象。老者极动静之时,是为太阳太阴;少者初动初静之际,是为少阴少阳。

有是四象,而五行具于其中矣。

水者,太阴也;火者,太阳也;木者,少阳也;金者,少阴也;土者,阴阳老少、木火金水冲气所结也。

----摘自子平真诠评注,一本八卦算命的书,听说还是比较中级的。


这就是老祖宗的机器学习。

管你生在什么环境什么人家,只要出生的时间确定,你的命就定了。对于理性的人,那当然呵呵了。

不过作为一种学术来了解一下,并没有什么过错。

就像中医,理论的形成早在二千年前,也许有不科学的地方,但有这样的传承,

说明了其存在的价值不是几个小丑能否定的。


上面的话,大概意思是:什么阴气阳气都是扯蛋,天地间只有一种气,太极。

太极动则为阳气,静则为阴气,很明显就是物质形态变化,两种状态的命名,就更不用说四象了,不过是动静状态中变化的进一步变化命名而已。

这里不是要让人去学八卦算命。是要说明一个问题。任何概念理论的出现都是有原因,不是凭空出现,所以要追本溯源。


那么阴阳五行,八卦九宫的极源都来自于太极,那太极来自那里呢?

我也不知道古人的想法,但日有所思,夜有所想,一种装逼扯蛋的概念提出,必须有受影响的环境。

那么,学习很明显了:首先感受环境的刺激,然后内部进行抽象,形成概念(不管形成神马都行),然后进一步的推理,比对等。不管什么算法,最终都要对环境进行应答,比如,编瞎话,装逼。


扯了这么长的栗子,现在正式开始。

============================

感知环境

如果我们心中的智能算法是一头太极狗,,那第一步就是分阴阳。

要想让这条太极狗叫两声,既然惟有动静分阴阳,那就得让刺激下这个太极狗吧。



那么第一步做什么呢?

这东西专业点说就是一个二分类器。

男的走左边,女的走右边。易碎的放上面,常用的放下面,好看的摆前面,不好看的放后面。

不管如何,都可以抽象出01来。

那就规定:1表示尖的东西,0表软的东西。那么拿1居它,他就汪汪汪,拿0居他就哼哼哼。


那如何把这个规定让太极狗理解呢?

谁有那功夫教它啊,直接植入基因,让他自己慢慢去感受吧。

第一步,设计基因,

来四盘脱氧核糖核苷酸,七分熟就好,再来一瓶82年的阿胶口服液。。。

-----------------------------------------------------------------------------

定义:

cell(x)是太极狗的一个感受细胞,行为Action=( 哼哼哼 , 汪汪汪);

那么,当cell(x)=1 , action= 汪汪汪,当cell(x)=0 , action=哼哼哼


第二步,cell(x)里面是个什么鬼呢?

最简单的,x>1?1:0  (如果x大于1那结果就是1,反之则返回0)

为什么要用x和1比较呢?

可不可以用2?

......

可不可以用250?

......

可不可以用6666666666?

......

好吧,你可以用:

sb=(2,250,6666,任何一个你喜欢顺眼的数,小数,分数。。。)

x>sb?1:0


变换一下,y = x-sb,y>0?1:0

再变换下,cell(x) = y,cell(x)=x-sb,F(x)>0?1:0

-----------------------------------------------------

能不能给x加点东西,82年的xo喝过没?

cell(x) = xo-sb

我只能说,说:wo ,好有钱哦,要不你把这个也放上去

cell(x) = wox-sb

.......

(有本事,去掉x-后大声念念,呵呵)

-----------------------------------------------------

以上是一种类型的感受细胞实现

cell(x) = x - b      ---> y = x + b   (a=1)

cell(x) = ax - b    ---> y = ax + b

这不就是一元一次方程,a为斜率,b为截距吗?初中就学了。

那么本质上来说,这东西就是在直角坐标系中是一条直线,所谓的规定,就是点,要么落在线上方,要么落在线上或是线下方。

如果是小学党水平也没关系。

找个窗户,在上面画根线,把窗户玻璃分两半,规定一边叫富,一边叫喜。闭上眼,原地转十圈,然后指头去摸窗户玻璃,什么摸到喜了?恭喜恭喜,单身狗终于有春天了。

-----------------------------------------------------------------

如果明白以上,那么就可以来实现太极狗了:

class  TaiChiDog{

private float a;

private float b;

        private String[] action = {"哼哼哼","汪汪汪"};

public int cell(x){

    return a*x-b>0?1:0;

}

        public String response(int input){

return this.cell(x)>0?action[1]:action[0];

}

}

任何一个类中main调用方法:

public static void main(String[] args){

TaiChiDog dog = new TaiChiDog();

        int[] inputs = {2,250,666,-2,-250,0,-666};

for(int input:inputs){

String action = dog.response(input);

System.out.println(action);

}

}

---------------------------------------------------------------

如果你真的按上面的代码去执行了,恭喜,你是一个有追求的人。

很明显上面的代码可执行,但是不管你如何执行,都返回哼哼哼。

因为a,b的取值都是0,这是java编程语言本身的特性。

那么问题本身就转化为:如何为a,b取合适的值。

如果给定两组数据(input1,action1),(input2,action2)

是不是就可以知道 :

若action1=哼哼哼,action2="汪汪汪'

a*input1-b<=0

a*input2-b>=0

很明显就可以解出a和b.

本质上来说,就是将输入的点用一条线划分开。

能分开两个点的线应该有无限多条。

如果输入是三个点呢?再美好的多角恋,也必然有两个在一起,另一个注定是孤独?也可能成为一家人,谁叫点少

情感的纠结程度是无限,所以分割线有无数条

如果输入是四个点呢?双双配对?也许又是一个大一环的多角恋,最终都成为孤独?也可能成为一家人,谁叫点少

情感的纠结程度是无限,所以分割线有无数条

如果输入是6个点,10个点,100个点呢?分割线还是无线?是的。不过可能是弯的。

可能有人会问,为什么只分为两堆,不可以分成三堆,四推吗?

当然可以。不过请告诉我,如何用一条直线把一个平面中的点分成三堆,四堆?


二分类器,就是这么一个如何让直线变弯的问题。让直面变弯面的问题,让超直平面变超弯平面的问题。

至于平面,超平面的超出本记录,下回再说。

正因为线无限,所以要确定一条线,一条最适合的线,不能单限的用两个方程组就能解出a和b。

那如何办呢?

第三步,解a和b

要找到一条最适合的分割线,一半天堂,一半凡尘。不多一分,不少一厘。

凭什么你的分割线就好,他的就差,别跟我扯什么最小二乘法,极值估算,听不懂,我要找根源。

根源就是,从图形上,想体现点与点之间的疏密程度。从实际中,想找到复用规律。

有这种感受,所以想将点与点做成的相对密区与另一个相对密区分离,尽可能分的开些。

唯有线离两个区域都尽可能的远,才能体现这种相对疏密关系。

因此,最好的一条线应该是酱紫的:

分在线两边的点到这条线的距离之和的差最好相等。

这样大家都不能占便宜。


写太多了,下篇再接到写。









0 0
原创粉丝点击