ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Python 机器学习算法二之逻辑回归的推导及实战

Python 机器学习算法二之逻辑回归的推导及实战 在线性回归模型里头, 我们事实上构建了一个模型, 用以拟合自变量与因变量之间的线性关系, 然而在某些特定的时候, 我们所要做的或许是一个分类模型, 那么在此处就有可能会用到线性回归模型的变种, 也就是逻辑回归, 在本节当中, 我们针对逻辑回归来展开一番详细的说明。实例引入仍以之前那一节所举的例子来说, 张三、李四、王五、赵六都准备去贷款了, 在贷款之际银行对他们的月薪以及住房面积等相关因素展开了调查, 而这两个因素决定着贷款款项能否即刻到账, 以下分别列出了他们四个人的工资状况、住房面积以及到账的具体情形:姓名工资(元)房屋面积(平方)是否可立即到账张三600058李四900077王五1100089赵六1500054瞅见了这般的数据, 又有一位孙七前来, 此人工资为 1 万 2 千元, 住房面积是 60 平, 那里的贷款能够即刻到账吗?思路探索对于这个例子而言, 我们并非再去预测贷款金额究竟具体为多少, 而是务必要针对款项能否立刻到账实施一种分类, 这种分类的结果不是“否”就是“是”, 因而输出结果我们得把它映射到一个区间之内, 使得 0 代表“否”, 1 代表“是”, 在此我们就需要借助一个函数来助力我们达成这个功能, 它的称谓是函数, 它的表达式照这样呈现: 它的函数图像是呈这样的:它定义域为全体实数, 值域是(0, 1), 自变量小于 -5 时, 其值趋近于 0, 自变量大于 5 时, 其值趋近于 1, 自变量为 0 时, 其值等于 1/2。那么我们在线性回归模型基础上加一层该函数, 结果不就能被转化为 0 到 1 了吗? 如此便很自然地转化成了一个分类模型。我们清楚, 线性回归模型的呈现形式是这般的: 要是我们在它的基础之上增添一层函数, 其表达式就会变为: 好, 此刻我们对一下这个表达式所表达的意义予以思索。我们通过举例来讲、倘若这个函数的输出成果是1, 那么我们必然认定结果为“是”。要是输出结果是0? 我们自然认定结果为“否”, 然而要是输出结果是0.5? 我们仅能够模棱两可, 在此时, 我们能够判断为“是”, 也能够判断为“否”, 然而恰好为0.5的概率实在是太小了, 或多或少都存在着一些偏差。所以要是输出结果为0.51, 那么我们会怎样去认为? 我们会觉得“是”的概率会更大, “否”的概率会更小, 概率是多少? 是0.49。要是输出结果是0.95? “是”的概率是多少? 无需多言, 肯定是0.95。因此, 我们能够看出来, 函数输出的结果, 代表了预测为“是”的概率, 而这概率, 正是真实结果为1的概率。如下这般来表达, 这里, 我们把预测结果用$ h{theta}(x) $表达出来所以, 针对输入x, 分类类别是1和0对应的概率分别就为: , $$ \begin{cases} P(y 1|x;\theta) \ h{\theta}(x) \\\\ P(y 0|x;\theta) \ 1 - h{\theta}(x) \end{cases}$$, $ J(\theta) \ \dfrac{1}{2m}\sum{i1}^{m}(h\theta(x^{(i)}) - y^{(i)})^2 $, $ Cost(h\theta(x), y) \ \begin{cases} -log(h\theta(x)), y 1 \\\\ -log(1- h\theta(x)), y 0 \end{cases}$, $ Cost(h\theta(x), y) \ -ylog(h\theta(x)) - (1-y)log(1-h\theta(x))$, $ J(\theta) \ \dfrac{1}{m}\sum{i1}^{m}Cost(h\theta(x^{(i)}), y^{(i)})\\\\$.$ \ – \dfrac{1}{m}\sum{i1}^{m}$ 句号。y的第i个值, 乘以以h与θ作用于x的第i个值的结果为对数的对数, 加上, 1减去y的第i个值的结果, 乘以, 以1减去h与θ作用于x的第i个值的结果为对数的对数。当下, 如同线性回归那样, 此次我们的目标是去寻觅到那个$ theta $, 于此状况下, 能让$ J(theta) $能够达到最小。推导过程这次咱们不能够像上次那般运用径直求偏导数、接着把偏导数设为0的方式去求解$ theta $来着, 如此会没办法得出确切的值。我们能够采用梯度下降法开展求解的工作也就是一步又一步地探寻出$theta$的更新进程, 公式是这样的: 这里面最为关键核心要点便是求偏导, 过程这样子: 因而: 这个时候我们察觉到, 它梯度下降的推导得出的结果跟线性回归恰好是一样的编程实现接下来, 我们依旧借助 里的 API 去搞出逻辑回归模型, 所运用的库是 , 它的 API 是这样的:1class sklearn.linear_model.LogisticRegression(penalty’l2’, dualFalse, tol0.0001, C1.0, fit_interceptTrue, intercept_scaling1, class_weightNone, random_stateNone, solver’liblinear’, max_iter100, multi_class’ovr’, verbose0, warm_startFalse, n_jobs1)参数说明如下仅在正则化优化算法为 -cg、sag 和 lbfgs 时才有用的, 用来表示算法收敛最大迭代次数int 类型, 默认为 10 的, 是有关算法收敛的最大迭代次数。分类方式选定参数str 类型, 可选参数为 ovr 和 , 默认为 ovr 的, 其中 ovr 当属前面提及的 one-vs-rest(OvR), 而 便是前面提到的 many-vs-many(MvM)。假设处于二元逻辑回归情形, ovr与之不存在任何差异, 差异主要体现在多元逻辑回归方面。日志冗长度, 乃是int类型, 默认值是0, 意味着不输出训练过程, 当值为1时偶尔输出结果, 大于1则对子模型逐个输出。热启动参数, 属于bool类型, 默认值为False, 若为True, 那么下一次训练会以追加树的方式开展重新用上一次调用当作初始化。并行数, 是int类型, 默认值为1。当处于1的情况时, 运用CPU的一个内核来运行程序, 当处于2的情况之时, 运用CPU的2个内核去运行程序, 当为 -1的情形的时候, 运用所有CPU的内核来运行程序。属性说明如下我们现在来解决上面的示例代码如下1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18from sklearn.linear_model import LogisticRegression x_data [ [6000, 58], [9000, 77], [11000, 89], [15000, 54] ] y_data [ 0, 0, 1, 1 ] lr LogisticRegression() lr.fit(x_data, y_data) x_test [[12000, 60]] print(Intercept, lr.intercept_) print(Coef, lr.coef_) print(款项是否可以立即到账, lr.predict(x_test)[0])在这里, 我们的数据发生了变化, 转变为了是非判断, 在此处, 0 所代表的含义是“否”, 而 1 所代表的含义是“是”。在这里进行逻辑回归操作的时候, 使用了对象, 随后调用 fit() 方法去进行拟合, 在拟合完成之后, 使用。12000, 60这条数据作为输入让模型输出它的预测值。 运行结果1 2 3Intercept [-0.03142387] Coef [[ 0.00603919 -0.72587703]] 款项是否可以立即到账 1截距项以及系数项于结果里被输出, 接着, 对能否立刻到账做了预测, 最后的结果是1, 这意味着孙七开展贷款之后, 款项能够立马到账。以上这些内容便是逻辑回归的基础推导以及代码应用实现。
返回列表