My Blog List

Sunday, June 12, 2011

机器学习中的数学(2)-线性回归,偏差、方差权衡

版权声明:
    本文由LeftNotEasy所有,发布于http://leftnoteasy.cnblogs.com。如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任。如果有问题,请联系作者 wheeleast@gmail.com
前言:
    距离上次发文章,也快有半个月的时间了,这半个月的时间里又在学习机器学习的道路上摸索着前进,积累了一点心得,以后会慢慢的写写这些心得。写文章是促进自己对知识认识的一个好方法,看书的时候往往不是非常细,所以有些公式、知识点什么的就一带而过,里面的一些具体意义就不容易理解了。而写文章,特别是写科普性的文章,需要对里面的具体意义弄明白,甚至还要能举出更生动的例子,这是一个挑战。为了写文章,往往需要把之前自己认为看明白的内容重新理解一下。
    机器学习可不是一个完全的技术性的东西,之前和部门老大在outing的时候一直在聊这个问题,机器学习绝对不是一个一个孤立的算法堆砌起来的,想要像看《算法导论》这样看机器学习是个不可取的方法,机器学习里面有几个东西一直贯穿全书,比如说数据的分布、最大似然(以及求极值的几个方法,不过这个比较数学了),偏差、方差的权衡,还有特征选择,模型选择,混合模型等等知识,这些知识像砖头、水泥一样构成了机器学习里面的一个个的算法。想要真正学好这些算法,一定要静下心来将这些基础知识弄清楚,才能够真正理解、实现好各种机器学习算法。
    今天的主题是线性回归,也会提一下偏差、方差的均衡这个主题。

机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)

版权声明:
   本文由LeftNotEasy所有,发布于http://leftnoteasy.cnblogs.com。如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任。
前言:
   上次写过一篇关于贝叶斯概率论的数学,最近时间比较紧,coding的任务比较重,不过还是抽空看了一些机器学习的书和视频,其中很推荐两个:一个是stanford的machine learning公开课,在verycd可下载,可惜没有翻译。不过还是可以看。另外一个是prml-pattern recognition and machine learning, Bishop的一部反响不错的书,而且是2008年的,算是比较新的一本书了。
   前几天还准备写一个分布式计算的系列,只写了个开头,又换到写这个系列了。以后看哪边的心得更多,就写哪一个系列吧。最近干的事情比较杂,有跟机器学习相关的,有跟数学相关的,也有跟分布式相关的。
   这个系列主要想能够用数学去描述机器学习,想要学好机器学习,首先得去理解其中的数学意义,不一定要到能够轻松自如的推导中间的公式,不过至少得认识这些式子吧,不然看一些相关的论文可就看不懂了,这个系列主要将会着重于去机器学习的数学描述这个部分,将会覆盖但不一定局限于回归、聚类、分类等算法。

Logistic Regression:从另外一个角度理解

Although the linear regression model is simple and used frequently it's not adequate for some purposes. For example, imagine the response variable y to be a probability that takes on values between 0 and 1. A linear model has no bounds on what values the response variable can take, and hence y can take on arbitrary large or small values. However, it is desirable to bound the response to values between 0 and 1. For this we would need something more powerful than linear regression.

Another problem with the linear regression model is the assumption that the response y has a constant variance. This can not be the case if y follows for example a binomial distribution (y ~ Bin(p,n)). If y also is normalized so that it takes values between 0 and 1, hence y = Bin(p,n)/n, then the variance would then be Var(y) = p*(1-p), which takes on values between 0 and 0.25. To then make an assumption that y would have a constant variance is not feasible.

In situations like this, when our response variable follows a binomial distribution, we need to use general linear regression. A special case of general linear regression is logistic regression, which assumes that the response variable follows the logit-function shown in Figure 4.

Figure 4 The logit function

Note that it's only defined for values between 0 and 1. The logit function goes from minus infinity to plus infinity. The logit function has the nice property that logit(p) = -logit(1-p) and its inverse is defined for values from minus infinity to plus infinity, and it only takes on values between 0 and 1.

However, to get a better understanding for what the logit-function is we will now introduce the notation of odds. The odds of an event that occurs with probability P is defined as

odds = P / (1-P).

Figure 5 shows how the odds-function looks like. As we can see, the odds for an event is not bounded and goes from 0 to infinity when the probability for that event goes from 0 to 1.

However, it's not always very intuitive to think about odds. Even worse, odds are quite unappealing to work with due to its asymmetry. When we work with probability we have that if the probability for yes is p, then the probability for no is 1-p. However, for odds, there exists no such nice relationship.

To take an example: If a Boolean variable is true with probability 0.9 and false with probability 0.1, we have that the odds for the variable to be true is 0.9/0.1 = 9 while the odds for being false is 0.1/0.9 = 1/9 = 0.1111… . This is a quite unappealing relationship. However, if we take the logarithm of the odds, when we would have log(9) for true and log(1/9) = -log(9) for false.

Hence, we have a very nice symmetry for log(odds(p)). This function is called the logit-function.

logit(p) = log(odds(p)) = log(p/(1-p))

As we can see, it is true in general that logit(1-p)=-logit(p).

logit(1-p) = log((1-p)/p) = – log(p/(1-p)) = -logit(p)

Figure 5 The odds function

The odds function maps probabilities (between 0 and 1) to values between 0 and infinity.

The logit-function has all the properties we wanted but did not have when we previously tried to use linear regression for a problem where the response variable followed a binomial distribution. If we instead use the logit-function we will have p bounded to values between 0 and 1 and we will still have a linear expression for our input variable x

logit(p) = a + beta * x.

If we would like to rewrite this expression to get a function for the probability p it would look like

 

转:决策树模型组合之随机森林与GBDT

前言:

决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等。但是同时, 单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的。

模型组合(比如说有Boosting,Bagging等)与决策树相关的算法比较多,这些算法最终的结果是生成N(可能会有几百棵以上)棵树,这样可以大 大的减少单决策树带来的毛病,有点类似于三个臭皮匠等于一个诸葛亮的做法,虽然这几百棵决策树中的每一棵都很简单(相对于C4.5这种单决策树来说),但 是他们组合起来确是很强大。

在最近几年的paper上,如iccv这种重量级的会议,iccv 09年 的里面有不少的文章都是与Boosting与随机森林相关的。模型组合+决策树相关的算法有两种比较基本的形式 – 随机森林与GBDT((Gradient Boost Decision Tree),其他的比较新的模型组合+决策树的算法都是来自这两种算法的延伸。本文主要侧重于GBDT,对于随机森林只是大概提提,因为它相对比较简单。

在看本文之前,建议先看看机器学习与数学(3)与其中引用的论文,本文中的GBDT主要基于此,而随机森林相对比较独立。

基础内容:

这里只是准备简单谈谈基础的内容,主要参考一下别人的文章,对于随机森林与GBDT,有两个地方比较重要,首先是information gain,其次是决策树。这里特别推荐Andrew Moore大牛的Decision Trees Tutorial,与Information Gain Tutorial。Moore的Data Mining Tutorial系列非常赞,看懂了上面说的两个内容之后的文章才能继续读下去。

决策树实际上是将空间用超平面进行划分的一种方法,每次分割的时候,都将当前的空间一分为二,比如说下面的决策树:

image

就是将空间划分成下面的样子:

image

这样使得每一个叶子节点都是在空间中的一个不相交的区域,在进行决策的时候,会根据输入样本每一维feature的值,一步一步往下,最后使得样本落入N个区域中的一个(假设有N个叶子节点)

随机森林(Random Forest):

随机森林是一个最近比较火的算法,它有很多的优点:

  • 在数据集上表现良好
  • 在当前的很多数据集上,相对其他算法有着很大的优势
  • 它能够处理很高维度(feature很多)的数据,并且不用做特征选择
  • 在训练完后,它能够给出哪些feature比较重要
  • 在创建随机森林的时候,对generlization error使用的是无偏估计
  • 训练速度快
  • 在训练过程中,能够检测到feature间的互相影响
  • 容易做成并行化方法
  • 实现比较简单

随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输 入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本 为那一类。

在建立每一棵决策树的过程中,有两点需要注意 – 采样与完全分裂。首先是两个随机采样的过程,random forest对输入的数据要进行行、列的采样。对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那 么采样的样本也为N个。这样使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现over-fitting。然后进行列采样,从M 个feature中,选择m个(m << M)。之后就是对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一 个分类。一般很多的决策树算法都一个重要的步骤 – 剪枝,但是这里不这样干,由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现over-fitting。

按这种算法得到的随机森林中的每一棵都是很弱的,但是大家组合起来就很厉害了。我觉得可以这样比喻随机森林算法:每一棵决策树就是一个精通于某一个窄领域 的专家(因为我们从M个feature中选择m让每一棵决策树进行学习),这样在随机森林中就有了很多个精通不同领域的专家,对一个新的问题(新的输入数 据),可以用不同的角度去看待它,最终由各个专家,投票得到结果。

随机森林的过程请参考Mahout的random forest 。这个页面上写的比较清楚了,其中可能不明白的就是Information Gain,可以看看之前推荐过的Moore的页面。

Gradient Boost Decision Tree:

GBDT是一个应用很广泛的算法,可以用来做分类、回归。在很多的数据上都有不错的效果。GBDT这个算法还有一些其他的名字,比如说MART(Multiple Additive Regression Tree),GBRT(Gradient Boost Regression Tree),Tree Net等,其实它们都是一个东西(参考自wikipedia – Gradient Boosting),发明者是Friedman

Gradient Boost其实是一个框架,里面可以套入很多不同的算法,可以参考一下机器学习与数学(3)中的讲解。Boost是”提升”的意思,一般Boosting算法都是一个迭代的过程,每一次新的训练都是为了改进上一次的结果。

原始的Boost算法是在算法开始的时候,为每一个样本赋上一个权重值,初始的时候,大家都是一样重要的。在每一步训练中得到的模型,会使得数据点的估计 有对有错,我们就在每一步结束后,增加分错的点的权重,减少分对的点的权重,这样使得某些点如果老是被分错,那么就会被“严重关注”,也就被赋上一个很高 的权重。然后等进行了N次迭代(由用户指定),将会得到N个简单的分类器(basic learner),然后我们将它们组合起来(比如说可以对它们进行加权、或者让它们进行投票等),得到一个最终的模型。

而Gradient Boost与传统的Boost的区别是,每一次的计算是为了减少上一次的残差(residual),而为了消除残差,我们可以在残差减少的梯度(Gradient)方向上建立一个新的模型。所以说,在Gradient Boost中,每个新的模型的简历是为了使得之前模型的残差往梯度方向减少,与传统Boost对正确、错误的样本进行加权有着很大的区别。

在分类问题中,有一个很重要的内容叫做Multi-Class Logistic,也就是多分类的Logistic问题,它适用于那些类别数>2的问题,并且在分类结果中,样本x不是一定只属于某一个类可以得到 样本x分别属于多个类的概率(也可以说样本x的估计y符合某一个几何分布),这实际上是属于Generalized Linear Model中讨论的内容,这里就先不谈了,以后有机会再用一个专门的章节去做吧。这里就用一个结论:如果一个分类问题符合几何分布,那么就可以用Logistic变换来进行之后的运算

假设对于一个样本x,它可能属于K个分类,其估计值分别为F1(x)…FK(x),Logistic变换如下,logistic变换是一个平滑且将数据规范化(使得向量的长度为1)的过程,结果为属于类别k的概率pk(x),

image

对于Logistic变换后的结果,损失函数为:

image

其中,yk为输入的样本数据的估计值,当一个样本x属于类别k时,yk = 1,否则yk = 0。

将Logistic变换的式子带入损失函数,并且对其求导,可以得到损失函数的梯度

image

上面说的比较抽象,下面举个例子:

假设输入数据x可能属于5个分类(分别为1,2,3,4,5),训练数据中,x属于类别3,则y = (0, 0, 1, 0, 0),假设模型估计得到的F(x) = (0, 0.3, 0.6, 0, 0),则经过Logistic变换后的数据p(x) = (0.16,0.21,0.29,0.16,0.16),y – p得到梯度g:(-0.16, -0.21, 0.71, -0.16, -0.16)。观察这里可以得到一个比较有意思的结论:

假设gk为样本当某一维(某一个分类)上的梯度:

gk>0时,越大表示其在这一维上的概率p(x)越应该提高,比如说上面的第三维的概率为0.29,就应该提高,属于应该往“正确的方向”前进

越小表示这个估计越“准确”

gk<0时,越小,负得越多表示在这一维上的概率应该降低,比如说第二维0.21就应该得到降低。属于应该朝着“错误的反方向”前进

越大,负得越少表示这个估计越“不错误 ”

总的来说,对于一个样本,最理想的梯度是越接近0的梯度。所以,我们要能够让函数的估计值能够使得梯度往反方向移动(>0的维度上,往负方向移动,<0的维度上,往正方向移动)最终使得梯度尽量=0),并且该算法在会严重关注那些梯度比较大的样本,跟Boost的意思类似

得到梯度之后,就是如何让梯度减少了。这里是用的一个迭代+决策树的方法,当初始化的时候,随便给出一个估计函数F(x)(可以让F(x)是一个随机的值,也可以让F(x)=0),然后之后每迭代一步就根据当前每一个样本的梯度的情况,建立一棵决策树。就让函数往梯度的反方向前进,最终使得迭代N步后,梯度越小。

这里建立的决策树和普通的决策树不太一样,首先,这个决策树是一个叶子节点数J固定的,当生成了J个节点后,就不再生成新的节点了。

算法的流程如下:(参考自treeBoost论文)

image

0. 表示给定一个初始值

1. 表示建立M棵决策树(迭代M次)

2. 表示对函数估计值F(x)进行Logistic变换

3. 表示对于K个分类进行下面的操作(其实这个for循环也可以理解为向量的操作,每一个样本点xi都对应了K种可能的分类yi,所以yi, F(xi), p(xi)都是一个K维的向量,这样或许容易理解一点)

4. 表示求得残差减少的梯度方向

5. 表示根据每一个样本点x,与其残差减少的梯度方向,得到一棵由J个叶子节点组成的决策树

6. 为当决策树建立完成后,通过这个公式,可以得到每一个叶子节点的增益(这个增益在预测的时候用的)

每个增益的组成其实也是一个K维的向量,表示如果在决策树预测的过程中,如果某一个样本点掉入了这个叶子节点,则其对应的K个分类的值是多少。比如 说,GBDT得到了三棵决策树,一个样本点在预测的时候,也会掉入3个叶子节点上,其增益分别为(假设为3分类的问题):

(0.5, 0.8, 0.1),  (0.2, 0.6, 0.3),  (0.4, 0.3, 0.3),那么这样最终得到的分类为第二个,因为选择分类2的决策树是最多的。

7. 的意思为,将当前得到的决策树与之前的那些决策树合并起来,作为新的一个模型(跟6中所举的例子差不多)

GBDT的算法大概就讲到这里了,希望能够弥补一下上一篇文章中没有说清楚的部分:)

实现:

看明白了算法,就需要去实现一下,或者看看别人实现的代码,这里推荐一下wikipedia中的gradient boosting页面,下面就有一些开源软件中的一些实现,比如说下面这个:http://elf-project.sourceforge.net/

参考资料:

除了文章中的引用的内容(已经给出了链接)外,主要还是参考Friedman大牛的文章:Greedy function approximation : A Gradient Boosting Machine

本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gmail.com

Google Blogger使用技巧

Blogger是Google提供的免费博客服务,提供中文界面,是一个很成熟的中文博客发布平台。

  Blogger一个突出的特点就是简洁但功能强大,没有多余而花哨的功能,必要的功能一个都不差。Bloger自由性最大的地方在于其模板可以自定义,也就是说你可以修改模板里的任何内容,包括Google的广告,这给那些懂Html和CSS的Blogger提供了很大的自由度。Blogger默认把用户的网志发布到免费提供的Blogspot.com主机上。可惜的是Blogspot.com从中国是无法访问。好在Blogger.com提供了一种很独特的服务,可以将博客的静态页面通过FTP发布到用户选择的服务器上。

  通过FTP发布到其他主机

  用户在Blogger.com上的默认Blog地址显然无法从国内访问,但是如果你有一个虚拟主机空间,或者其他支持FTP的空间,那么Blogger.com可以将这个地址上的日志文件全部发布到你的虚拟主机空间上去。

  具体的方法是:登陆你的Blogger帐号,进入控制面板,更改设置,在"发布"选项卡中点击FTP的超级链接,然后录入FTP服务器地址,FTP用户名和密码。点保存设置后,就可以发布了,这时Blogger.com会将你的整个站发布到你指定的主机上。

  至于这个FTP服务器,我推荐一个国内GFans提供的免费Blogger Spaces空间,支持FTP发布,最重要的是支持域名绑定,其服务器在广州,速度很快,希望大家不要滥用其服务。

  通过电子邮件发布日志

  在Blogger中写日志麻烦?告诉你一个技巧,你可以不登录Blogger网站,只要发送一封电子邮件就可以发表文章了。

  具体的方法是:登陆你的Blogger帐号,进入控制面板,更改设置,在"电子邮件"中,在Mail-to-Blogger地址中可以自定义一个邮件地址,发送到此地址的邮件会自动张贴,BlogSend地址是另外一个电子邮件地址,只要一发布文章,系统会将其邮寄文章到此地址。

  这里再介绍一个小技巧,就是在更新Blogger的同时也更新MSN Space。因为MSN Space也是支持邮件发布的,因此将Blogger发布后发送邮件的BlogSend地址修改为MSN Space的发布邮件地址,这样在Blogger上发布一篇文章后,系统就会自动将文章内容发送到Msn Spaces里,这样就同时更新了两个博客。

  有一点值得注意的是,Blogger默认的编码是UTF-8编码,因此发送邮件的时候要将邮件编码设置为UTF-8的格式,建议登陆GMail发送邮件。一来GMail默认就是UTF-8格式的,编码全兼容,二来GMail支持自动保存功能,不怕电脑死机后丢失文章,三来GMail还可以自动备份发出去的文章,以免文章丢失。

  使用第三方软件发布文章

  Zoundry是一个第三方的日志发布软件,可以做到不用登陆Blogger即可发布日志,使用它来编辑和发布,速度和效率都非常理想。

  添加Google Adsense广告

  Google Blogger用户可以很快捷方便地申请加入Google Adsense广告服务。Google本身也推荐博客们使用Blogger的广告来为自己和Google赚钱。

  Google工具栏的应用

  Google工具栏有一个按钮是"发送到Blogger",可以快速将当前网页发送到自己的Blogger空间上。

  Google Picasa的应用

  Picasa是Google的图像管理软件,在Picasa中点图片,再点"Blog This",可以将选定图片发送到自己的Blogger空间上。

  Blogger的申请地址是: http://www.blogger.com

Gradient Boosted Decision Tree(GBDT)

Gradient Boosted Decision Trees are an additive classification or regression model consisting of an ensemble of trees, fitted to current residuals, gradients of the loss function, in a forward step-wise manner. In the traditional boosting framework, the weak learners are generally shallow decision trees consisting of a few leaf nodes. GBDT ensembles are found to work well when there are hundreds of such decision trees. Gradient Boosted Decision Trees was introduced by Jerome Friedman in 1999. Salford Systems' Treenet and the GBM package in R are implementations of GBDT.

In machine learning, understanding how one's model succeeds or fails for a particular dataset or sample is important to building better models. For Naive Bayes classifiers, a list of frequency counts and a confusion matrix is generally informative enough to understand what went wrong. For traditional decision trees, understanding how a sample traverses the tree is highly informative about which features caused a sample to be classified a particular way.

For GBDT models, since there are hundreds of decisions trees, we can not realistically expect a researcher to be able to look at all the decision trees and the individual path the sample traverses each tree. Our proposal is to work on visualizations of ensembles of GBDT for error analysis. Of particular focus will be generating a single representative tree from the ensemble and visualizations of the paths that a particular sample traverses and what features impacted the final results the most.


References
  • Mulvaney R, Phatak DS. A Method to Merge Ensembles of Bagged or Boosted Forced-Split Decision Trees. IEEE Trans on PAMI. 2003
  • Barlow, T., Neville, P. Case study: visualization for decision tree analysis in data mining. IEEE Symposium on Information Visualization, 2001.
  • Soon Tee Teoh, Kwan-Liu Ma, PaintingClass: interactive construction, visualization and exploration of decision trees. In Proceedings of the ninth ACM SIGKDD international conference on Knowledge discovery and data mining

From:http://vis.berkeley.edu/courses/cs294-10-fa07/wiki/index.php/FP-Jerry_Ye_and_Jimmy_Chen

Sunday, April 17, 2011

[1.3acres bbs开新版通知] 有意将来做软件的同学看过来!!


[1.3acres bbs开新版通知] 有意将来做软件的同学看过来!!

完成申请、确定了去哪个学校,既是你前面这些年学习的终点,也是你在美国学业和职业的起点。
“学位只是一个敲门砖”,你辛苦的申请到了某个学校,读完了学位,然后就要被推上就业市场,开始求职。现在的经济形势依然很差,国际学生就业依然很难,有不少同学,来美国甚至不到一年,就要面临找工作的现实了。
当你来到公司面试现场的时候,你毕业于国内哪个学校,在美国有奖学金还是自费,发表了五篇论文还是连导师都没有,常春藤名校还是中部鸟不拉屎大学,都无所谓了。你都获得了一次证明自己能力的公平机会。问题是,你ready了吗?你辛辛苦苦的拿到一个面试的机会,如何才能把握住,而不是screw up?
就像GRE/TOEFL需要认真备考一样,面试也要认真准备,而且也可以通过精心准备获得成功。
对于寻找软件类工作尤其是侧重开发的同学来说,算法设计和编程技术,就是基础。你的gpa是3.6还是3.7,没人计较;当年申请是拿了十个offer还是勉强一个小ad,也没人过问。是骡子是马,拉来on site interview,现场给几道题目,看看你能否在规定的时间内给出solution,能力的强弱立刻就可以判断出来了。
能力超强的同学也许不用担心,但是对于绝大部分同学来说,能否通过这些技术面试题目,就成了你是成功拿到job offer,还是饮恨在dream company门口的分界线了。来之不易的on site面试机会很少,一个机会,如果把握住了,你家里几十万自费留学的投资、几年的教育回报、你未来的career基础,就都有了;如果挂掉了,你可能就要直接圈起铺盖回国。
以面试论英雄,以面试定成败。所谓天堂和地域只有一线之隔,这就是再赤裸裸不过的例子。而这就将发生在你,一个来美国没多久、说英语都可能还磕磕绊绊的人的身上。
幸好,面试的时间,即使再长,通常也不过是半天到一天而已,本质上,还是短时间内的一锤子买卖;而面试的题目,通过训练,也可以作到熟练解答甚至熟能生巧的地步。
既然如此,那你下面要做的,很简单:crack the interview! 面试可能遇到的问题多种多样,behavioral question固然需要准备,但是technical question往往才是最难攻克、短时间内很难准备好的。
也透露一点消息:最近在地里上传面试题目和解法的wwwyhx,就是申请11fall入学的!大家还在讨论offer/ad的时候,wwwyhx同学就已经果断开始准备做面试的技术题目了,最近更是达到了每天一题、周末两题的地步。
先飞的鸟儿,先行的达人,就在一亩三分地上!当你还在算计综合20和专业20哪个学校更有利于你将来发展,当你还在憧憬美国生活的时候,wwwyhx同学已经闷头开始作非常hardcore的面试题,提高技术背景了,而且,正在或者打算这样做的同学,我已经知道几个了!
好多人来了美国以后,稀里糊涂过了几个学期,临近面试了,才仓促的准备面试的技术题目,而有的同学,4/15还没到,签证还没到手,就已经有strong initiative来展开具体工作了。
一亩三分地论坛决定成立“编程技术版”(暂时作为eecs子板块),组织学习小组,集体作算法+编程问题,希望通过大家探讨,能形成一个相互学习、共同进步的良好环境,也希望地里能有更多农民,将来可以搞爆技术面试!上来写找到工作的经验总结贴!
我考虑了一些实际问题,集合discuz论坛的特点,暂时制定了论坛初期的规则,第一人斑竹当然由wwwyhx担任。据我所知,上一亩三分地的筒子里,也有很多人已经在美国了,可能也处于找工作的阶段,欢迎你们也加入!高手更多,大家也可以有更多的机会相互学习。想为版面做贡献的,也请来Warald处报名,要求是有一定的基础,同时愿意带领大家一起进步
  • 论坛暂定只有斑竹可以发贴,每贴一题,格式为[<id>.<question id>]<brief summary>,比如“[wwwyhx.Q78]数鸭子问题”,或者“bookname.chapter9.Q3”以后说起此题,就可以说wwwyhx第78题或者某书某题,原则是希望能像offer/ad汇报版一样的整齐、整洁,方便查找
  • 每道题目内,请加上出处,if possible
  • 大家都可以讨论或者写自己的solution,请编辑帖子将答案修改成白色,免得答案直接暴露在别人面前,培养惰性;如果要阅读别人的答案,鼠标全选某层楼就可以看到了。如果你想hide自己的答案也可以,语法为:[hide=x]blablabla[/hide],其中x替换为积分比如100、200
  • 觉得好的解答,请每人加分,一次10分。
  • 鼓励code review和评论,杜绝“顶”等毫无意义的回答,希望论坛内的帖子精炼、信息量丰富,凡是来水帖子的,统统扣分或者警告,次数一多,你会被论坛自动封杀。
最后,说明一下:
  • 开版伊始,我们暂时把活动定为由wwwyhx带领大家做算法题目,可以使用任何语言,欢迎把你的问题和solution贴出来;其他活动,开展哪些、何时开展,视情况而定
  • 我们提倡相互帮助,帮助别人也是自我提高的过程,但是论坛里没有人有义务手把手教你编程,没有人有义务给你调程序。说白了,是个大家一起学习、交流和一起监督、汇报进程的地方。
  • 我的个人意见:最最重要的,是整个过程有毅力能follow下来,认真花时间来练习。也因此,实话实说,我的期望值并不高,能有小队的同学自始至终作好,我就觉得很满意了;当然,如果能有大量的积极分子出现,气氛活跃,那更好!
  • warald本人不参与具体的编程讨论和板块内容管理,我只监督和提供支持。技术问题,靠大家讨论、研究来解决;进度和速度由斑竹wwyhx统一掌握,如果出现了牛群,可以组织更高速的小牛组 – 其实别的版也出现了学习小组,比如战拖(anti-procrastination)组
  • 所有规矩只是初稿,未必100%适用,实行一段时间之内,根据大家的意见来调整,有问题、有意见,请及时提出。

如果你认识什么大牛,也请把这个帖子转给他/她,欢迎参加!