经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
logistic逻辑回归公式推导及R语言实现
来源:cnblogs  作者:知然  时间:2018/9/25 19:11:10  对本文有异议

Logistic逻辑回归

Logistic逻辑回归模型

线性回归模型简单,对于一些线性可分的场景还是简单易用的。Logistic逻辑回归也可以看成线性回归的变种,虽然名字带回归二字但实际上他主要用来二分类,区别于线性回归直接拟合目标值,Logistic逻辑回归拟合的是正类和负类的对数几率。

假设有一个二分类问题,输出为y∈{0,1}

定义sigmoid函数:

用sigmoid函数的输出是0,1之间,用来拟合y=1的概率,其函数R语言画图如下:

  1. x = seq(-5, 5, 0.1)
  2. y = 1 / (1 + exp(-1*x))
  3. plot(x, y, type="line")

logistic逻辑回归可以拟合因变量为1的概率,最终分类的时候,我们可以一个阈值,比如0.5,大于阈值的都分为正类,向量化公式如下:

还可以换一种方式理解logistic逻辑回归,他是用多元线性函数去拟合因变量为正例与反例的比值的自然对数,推导如下:

Logistic逻辑回归算法

  • 假设自变量维度为N
  • W为自变量的系数,下标0 - N
  • X为自变量向量或矩阵,X维度为N,为了能和W0对应,X需要在第一行插入一个全是1的列。
  • Y为因变量
  • W为未知数待求解

最大似然估计法

梯度下降法迭代公式

R语言实现

使用iris数据集

  1. > head(iris)
  2. Sepal.Length Sepal.Width Petal.Length Petal.Width Species
  3. 1 5.1 3.5 1.4 0.2 setosa
  4. 2 4.9 3.0 1.4 0.2 setosa
  5. 3 4.7 3.2 1.3 0.2 setosa
  6. 4 4.6 3.1 1.5 0.2 setosa
  7. 5 5.0 3.6 1.4 0.2 setosa
  8. 6 5.4 3.9 1.7 0.4 setosa

将数据分为训练数据和测试数据

R语言使用批量梯度下降法迭代求解

  1. iris2 = rbind(subset(iris, Species=='setosa'), subset(iris, Species=='versicolor'))
  2. X <- cbind(rep(1, nrow(iris2)), iris2$Sepal.Length, iris2$Sepal.Width, iris2$Petal.Length, iris2$Petal.Width)
  3. Y <- as.numeric(iris2$Species) - 1
  4. maxIterNum <- 2000;
  5. step <- 0.05;
  6. W <- rep(0, ncol(X))
  7. m = nrow(X)
  8. sigmoid <- function(z) { 1 / (1 + exp(-z))}
  9. for (i in 1:maxIterNum){
  10. grad <- t(X) %*% (sigmoid(X %*% W)-Y);
  11. if (sqrt(as.numeric(t(grad) %*% grad)) < 1e-8){
  12. print(sprintf('iter times=%d', i));
  13. break;
  14. }
  15. W <- W - grad * step;
  16. }
  17. print(W);
  18. hfunc <- function(a) {if (a > 0.5) return(1) else return (0);}
  19. myY = apply(sigmoid(X %*% W), 1, hfunc)
  20. print(cbind(Y, myY))

输出后,可以看到拟合完全正确,因为本文只是为了推导一下逻辑回归的算法,所以直接用全部数据拟合,没有再抽出一部分做测试数据。

总结

  • 应该增加一部分训练数据,验证模型的正确性
  • 应该增加正则项避免过拟合,比如L2正则

更多精彩文章 http://h2cloud.org/

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号