Logistic Regression(逻辑回归),在分类算法中应该也算是鼎鼎有名了。作为GLM的成员之一,他的Link 是一个sigmoid函数。
Ng的machine learning从最大似然角度,给出了cost function,然后用梯度下降的办法求得系数向量w。(http://www.tuicool.com/articles/auQFju)
逻辑回归的优点是他模型简单、易于解释、灵活度大(调整cutoff),计算相对快速容易,也可以并行化。
缺点是它是线性的,对非线性的问题不好处理,它只能是个二分类算法(extend to softmax)。weka中的logistic regression是支持的多分类的,其实他就是softmax回归!
解逻辑回归的优化方法有很多,包括梯度下降、牛顿法、拟牛顿法、L-BFGS等。weka中使用的是拟牛顿法(Quasi-Newton Methods)--题外话,虽然本科的时候上过,现在都还给老师了-_-|||。
下面进入正题,来看看buildClassify:
// can classifier handle the data?
getCapabilities().testWithFail(train);
// remove instances with missing class
train = new Instances(train);
train.deleteWithMissingClass();
// Replace missing values
m_ReplaceMissingValues = new ReplaceMissingValues();
m_ReplaceMissingValues.setInputFormat(train);
train = Filter.useFilter(train, m_ReplaceMissingValues);
// Remove useless attributes
m_AttFilter = new RemoveUseless();
m_AttFilter.setInputFormat(train);
train = Filter.useFilter(train, m_AttFilter);
// Transform attributes
m_NominalToBinary = new NominalToBinary();
m_NominalToBinary.setInputFormat(train);
train = Filter.useFilter(train, m_NominalToBinary);
刚开始和一般的差不多,检查数据,删掉没有标签的。
ReplaceMissingValues是用modes或