一:梯度下降:

梯度下降本质上是对极小值的无限逼近。先求得梯度,再取其反方向,以定步长在此方向上走一步,下次计算则从此点开始,一步步接近极小值。需要注意的是步长的取值,如果过小,则需要多次迭代,耗费大量时间才能取得极小值;如果过大,则可能难以取得较为接近极小值的点,在极小值两边来回跳跃,无法接近极小值。

而步长的取值往往于梯度有关,如果梯度的值较大,则步长可以取大的值,如果梯度较小,则步长应取较小值。

优势:高效,优化途径多

劣势:需要一些超参数:regularization(正则化)参数以及number of iterations(迭代次数),对feature scalling(特征缩放)敏感。

 from sklearn.linear_model import SGDClassifier as SGD

 x=[[0,0],[1,1]]
y=[0,1]
clf = SGD(alpha=0.0001, average=False, class_weight=None, epsilon=0.1,
eta0=0.0, fit_intercept=True, l1_ratio=0.15,
learning_rate='optimal', loss='hinge', max_iter=5, n_iter=None,
n_jobs=1, penalty='l2', power_t=0.5, random_state=None,
shuffle=True, tol=None, verbose=0, warm_start=False)
clf.fit(x,y)
print(clf.predict([[2,2]]))
print(clf.coef_)
print(clf.intercept_)
print(clf.decision_function([[2,2]])

根据官方网站的代码,使用了SGDClassifier分类器,进行了尝试。

 # coding = UTF-8
from sklearn.linear_model import SGDClassifier as SGD
from sklearn.datasets.samples_generator import make_blobs
import matplotlib.pyplot as plt
import numpy as np X,y = make_blobs(n_samples=50,centers=2,random_state=0,cluster_std=0.6)
clf = SGD(loss='hinge',alpha=0.01,max_iter=200,fit_intercept=True)
clf.fit(X,y)
print("预测1:",clf.predict([[1,10]]))
print("预测2:",clf.predict([[2,2]]))
print("回归系数:",clf.coef_)
print("偏差",clf.intercept_)
print("##################")
print(X.shape)
print(y.shape)

使用make_blobs创建数据测试。

注:

  • loss="hinge": (soft-margin) linear Support Vector Machine ((软-间隔)线性支持向量机),
  • loss="modified_huber": smoothed hinge loss (平滑的 hinge 损失),
  • loss="log": logistic regression (logistic 回归),
  • and all regression losses below(以及所有的回归损失)。

前两个 loss functions(损失函数)是懒惰的,如果一个例子违反了 margin constraint(边界约束),它们仅更新模型的参数, 这使得训练非常有效率,即使使用了 L2 penalty(惩罚)我们仍然可能得到稀疏的模型结果。

梯度下降需注意参数:

alpha:乘以正则化项的常数,默认0.0001。当被设置为‘optimal’时也被用于计算学习效率

fit_intercept:是否该截取截距,默认True。如果为‘False’则假定数据以及居中。

梯度下降常用方法:

fit(X,y,coef_init=None,intercept_init=None,sample_weight=None):拟合线性模型(训练)

X:{类似数组的稀疏矩阵},形式:(n_sanmples,n_features)。

y:类似数组,形式:(n_samples)。

sample_weight:数组样本,形式:(n_samples,),optional(可选),可以设定个别样本的权重,如果不设定,则默认相等。

predict(X):用于预测X样本中的标签(结果/分类)

X:{类似数组的稀疏矩阵},形式:[n_samples,n_features]。

score(X,y,samples_weight=None)::(与上方相同)用于返回测试数据和标签(结果)的平均精度。

二:逻辑回归(逻辑斯特增长模型):

逻辑回归实际为一种分类的线性模型。如图,值域为0~1。如果需要解决非线性问题,与支持向量机SVM的思路相同,即将特征映射到高维来解决问题。因此,也可用梯度下降来求解。

 import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression as Log data=[ [-0.017612,14.053064,0],
[-1.395634,4.662541,1],
[-0.752157,6.538620,0],
[-1.322371,7.152853,0],
[0.423363,11.054677,0],
[0.406704,7.067335,1],
[0.667394,12.741452,0],
[-2.460150,6.866805,1],
[0.569411,9.548755,0],
[-0.026632,10.427743,0],
[0.850433,6.920334,1],
[1.347183,13.175500,0],
[1.176813,3.167020,1],
[-1.781871,9.097953,0],
[-0.566606,5.749003,1],
[0.931635,1.589505,1],
[-0.024205,6.151823,1],
[-0.036453,2.690988,1],
[-0.196949,0.444165,1],
[1.014459,5.754399,1] ] dataMat = np.mat(data)
y=dataMat[:,2]
b=np.ones(y.shape)
x=np.column_stack((b,dataMat[:,0:2]))
x=np.mat(x) model = Log()
model.fit(x,y)
print(model) predicted = model.predict(x)
answer = model.predict_proba(x)
print (predicted)
print(answer)

LogisticRegression中有这些参数需要注意:

penalty:'l1','l2'使用l1正则化,还是l2,默认l2

tol:精度为多少时可以停止计算,默认1e-4(十的负四次方)

C:C越大,正则化因子所占比例越小,C越小,正则化因子所占比例越大,默认1.0

solver:使用什么方法,默认liblinear(线性算法)。newton-cg,lbfgs,liblinear(对小数据集表现较好,大数据集建议使用sag及saga),sag(随即平均梯度下降算法Stochastic Average Gradient desqent solver),saga。

max_iter:最大迭代次数,默认100。

LogisticRegression常用方法:

fit(X,y,sample_weight=None):用于拟合模型(训练)

X:{类似数组的稀疏矩阵},形式:(n_samples,n_features)。

y:类似数组,形式:(n_samples)。

sample_weight:数组样本,形式:(n_samples,),optional(可选),可以设定个别样本的权重,如果不设定,则默认相等。

predict(X):用于预测X样本的标签(结果/分类)

X:同上。

返回C:数组,形式:[n_samples]

predict_proba(X):用于预测为对应标签的概率

X:同上。

返回一个n行k列的数组,n对应样本数量,k为可能的标签(结果/分类),每一行的结果之和应为1

sklearn使用——梯度下降及逻辑回归的更多相关文章

  1. 机器学习算法整理(二)梯度下降求解逻辑回归 python实现

    逻辑回归(Logistic regression) 以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ 用梯度下降求解逻辑回归 Logi ...

  2. [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类

    ps:本博客内容根据唐宇迪的的机器学习经典算法  学习视频复制总结而来 http://www.abcplus.com.cn/course/83/tasks 逻辑回归 问题描述:我们将建立一个逻辑回归模 ...

  3. 02-12 Logistic(逻辑)回归

    目录 逻辑回归 一.逻辑回归学习目标 二.逻辑回归引入 三.逻辑回归详解 3.1 线性回归与逻辑回归 3.2 二元逻辑回归的假设函数 3.2.1 让步比 3.2.2 Sigmoid函数图像 3.3 二 ...

  4. Andrew Ng机器学习课程笔记(二)之逻辑回归

    Andrew Ng机器学习课程笔记(二)之逻辑回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364636.html 前言 ...

  5. 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测

    线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...

  6. 逻辑回归(logic regression)的分类梯度下降

    首先明白一个概念,什么是逻辑回归:所谓回归就是拟合,说明x是连续的:逻辑呢?就是True和False,也就是二分类:逻辑回归即使就是指对于二分类数据的拟合(划分). 那么什么是模型呢?模型其实就是函数 ...

  7. [Deep Learning] 神经网络编程基础 (Basics of Neural Network Programming) - 逻辑回归-梯度下降-计算图

    在神经网络中,假如有m个训练集,我们想把他们加入训练,第一个想到得就是用一个for循环来遍历训练集,从而开始训练.但是在神经网络中,我们换一个计算方法,这就是 前向传播和反向传播. 对于逻辑回归,就是 ...

  8. Sklearn实现逻辑回归

    方法与参数 LogisticRegression类的各项参数的含义 class sklearn.linear_model.LogisticRegression(penalty='l2', dual=F ...

  9. sklearn逻辑回归(Logistic Regression)类库总结

    class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_inter ...

随机推荐

  1. SpringMVC+JWT+Swagger UI+RestFul

    前言: 其实很早就想写这篇文章了,因为我觉得这会对很多新手有指引作用,当初自己也是瞎子过河的摸索着过来的.目前后台开发比较流行的MVC框架中使用Spring MVC还是比较多的,当然还有Spring ...

  2. 10.Django ModelForm

    ModelForm 1.ModeForm简单验证 from django.db import models # Create your models here. class UserInfo(mode ...

  3. JVM基础系列第3讲:到底什么是虚拟机?

    我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的.类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 ...

  4. Netty(二) 从线程模型的角度看 Netty 为什么是高性能的?

    前言 在之前的 SpringBoot 整合长连接心跳机制 一文中认识了 Netty. 但其实只是能用,为什么要用 Netty?它有哪些优势?这些其实都不清楚. 本文就来从历史源头说道说道. 传统 IO ...

  5. laravel的消息队列剖析

    laravel的消息队列剖析 这篇来自于看到朋友转的58沈剑的一篇文章:1分钟实现"延迟消息"功能 在实际工作中也不止遇见过一次这个问题,我在想着以前是怎么处理的呢?我记得当初在上 ...

  6. 『战略游戏 最大利润 树形DP』

    通过两道简单的例题,我们来重新认识树形DP. 战略游戏(luoguP1026) Description Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题.他要 ...

  7. Why DDD and layered architecture

    As a developer, you may think that your job is to write code. However, Software development is not a ...

  8. Qt 给控件QLineEdit添加clicked事件方法

    做Qt开发的会知道QLineEdit是默认没有clicked事件的,但是Qt有很好的一套信号/槽机制,而且Qt是基于C++面向对象的思想来设计的,那么我们就很容易通过自己定义一些类,重写QLineEd ...

  9. [Go] golang互斥锁mutex

    1.互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码2.Lock()和Unlock()定义临界区 package main import ( " ...

  10. .class文件查看

    十六进制查看(不仅class文件可以看,其他文件格式也可以) hexdump -C XXX.class #注意C是大写(小写c则输出十进制) 反汇编查看 javap -c XXX.class java ...