sklearn使用——梯度下降及逻辑回归
一:梯度下降:
梯度下降本质上是对极小值的无限逼近。先求得梯度,再取其反方向,以定步长在此方向上走一步,下次计算则从此点开始,一步步接近极小值。需要注意的是步长的取值,如果过小,则需要多次迭代,耗费大量时间才能取得极小值;如果过大,则可能难以取得较为接近极小值的点,在极小值两边来回跳跃,无法接近极小值。
而步长的取值往往于梯度有关,如果梯度的值较大,则步长可以取大的值,如果梯度较小,则步长应取较小值。
优势:高效,优化途径多
劣势:需要一些超参数: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使用——梯度下降及逻辑回归的更多相关文章
- 机器学习算法整理(二)梯度下降求解逻辑回归 python实现
逻辑回归(Logistic regression) 以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ 用梯度下降求解逻辑回归 Logi ...
- [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类
ps:本博客内容根据唐宇迪的的机器学习经典算法 学习视频复制总结而来 http://www.abcplus.com.cn/course/83/tasks 逻辑回归 问题描述:我们将建立一个逻辑回归模 ...
- 02-12 Logistic(逻辑)回归
目录 逻辑回归 一.逻辑回归学习目标 二.逻辑回归引入 三.逻辑回归详解 3.1 线性回归与逻辑回归 3.2 二元逻辑回归的假设函数 3.2.1 让步比 3.2.2 Sigmoid函数图像 3.3 二 ...
- Andrew Ng机器学习课程笔记(二)之逻辑回归
Andrew Ng机器学习课程笔记(二)之逻辑回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364636.html 前言 ...
- 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测
线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...
- 逻辑回归(logic regression)的分类梯度下降
首先明白一个概念,什么是逻辑回归:所谓回归就是拟合,说明x是连续的:逻辑呢?就是True和False,也就是二分类:逻辑回归即使就是指对于二分类数据的拟合(划分). 那么什么是模型呢?模型其实就是函数 ...
- [Deep Learning] 神经网络编程基础 (Basics of Neural Network Programming) - 逻辑回归-梯度下降-计算图
在神经网络中,假如有m个训练集,我们想把他们加入训练,第一个想到得就是用一个for循环来遍历训练集,从而开始训练.但是在神经网络中,我们换一个计算方法,这就是 前向传播和反向传播. 对于逻辑回归,就是 ...
- Sklearn实现逻辑回归
方法与参数 LogisticRegression类的各项参数的含义 class sklearn.linear_model.LogisticRegression(penalty='l2', dual=F ...
- sklearn逻辑回归(Logistic Regression)类库总结
class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_inter ...
随机推荐
- SpringMVC+JWT+Swagger UI+RestFul
前言: 其实很早就想写这篇文章了,因为我觉得这会对很多新手有指引作用,当初自己也是瞎子过河的摸索着过来的.目前后台开发比较流行的MVC框架中使用Spring MVC还是比较多的,当然还有Spring ...
- 10.Django ModelForm
ModelForm 1.ModeForm简单验证 from django.db import models # Create your models here. class UserInfo(mode ...
- JVM基础系列第3讲:到底什么是虚拟机?
我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的.类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 ...
- Netty(二) 从线程模型的角度看 Netty 为什么是高性能的?
前言 在之前的 SpringBoot 整合长连接心跳机制 一文中认识了 Netty. 但其实只是能用,为什么要用 Netty?它有哪些优势?这些其实都不清楚. 本文就来从历史源头说道说道. 传统 IO ...
- laravel的消息队列剖析
laravel的消息队列剖析 这篇来自于看到朋友转的58沈剑的一篇文章:1分钟实现"延迟消息"功能 在实际工作中也不止遇见过一次这个问题,我在想着以前是怎么处理的呢?我记得当初在上 ...
- 『战略游戏 最大利润 树形DP』
通过两道简单的例题,我们来重新认识树形DP. 战略游戏(luoguP1026) Description Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题.他要 ...
- Why DDD and layered architecture
As a developer, you may think that your job is to write code. However, Software development is not a ...
- Qt 给控件QLineEdit添加clicked事件方法
做Qt开发的会知道QLineEdit是默认没有clicked事件的,但是Qt有很好的一套信号/槽机制,而且Qt是基于C++面向对象的思想来设计的,那么我们就很容易通过自己定义一些类,重写QLineEd ...
- [Go] golang互斥锁mutex
1.互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码2.Lock()和Unlock()定义临界区 package main import ( " ...
- .class文件查看
十六进制查看(不仅class文件可以看,其他文件格式也可以) hexdump -C XXX.class #注意C是大写(小写c则输出十进制) 反汇编查看 javap -c XXX.class java ...