#导入包
import numpy as np
import pandas as pd
import matplotlib as plt
import statsmodels.formula.api as smf
from sklearn import linear_model
import matplotlib.pyplot as plt
%matplotlib inline#使用pandas读取数据支持xls和xlsx
data=pd.read_excel("bankloan_binning.xlsx")
data.head(3)#显示数据开头6行
#随机梯度下降(Stochastic Gradient Descent)
x1=np.array([1,2,3])
x2=np.array([3,2,2])
y=np.array([1,0,1])
plt.scatter(x1,y)#1.sgd最小化模型误差
"""
w=w+alpha*(y-p)*p*(1-p)*x
注:w为回归系数,alpha学习率,在[0 1]之间,通常设为0.3方程:log(p/(1-p))=b0+b1*x1+b2*x2,or p=1/(1+exp(-(b0+b1*x1+b2*x2)))
"""
#2.sgd算法"""
迭代#1
令:b0=0,b1=0,b2=0,则p=1/(1+exp(-(0+0*1+0*3)))=0.5
因为w=w+alpha*(y-p)*p*(1-p)*x,
所以,
b0=0+0.3*(1-0.5)*0.5*(1-0.5)*1=0.0375 #这里的1和下面的1不一样,这里的是默认为1
b1=0+0.3*(1-0.5)*0.5*(1-0.5)*1=0.0375 #这里的1是x1的值
b2=0+0.3*(1-0.5)*0.5*(1-0.5)*3=0.1125 #这里的1是x2的值迭代#2
令:b0=0.0375,b1=0.0375,b2=0.1125,则p=1/(1+exp(-(0.0375+0.0375*2+0.01125*2)))=0.534
因为w=w+alpha*(y-p)*p*(1-p)*x,
所以,
b0=0.0375+0.3*(0-0.534)*0.534*(0-0.534)*1=
b1=0.0375+0.3*(0-0.534)*0.534*(0-0.534)*2=
b2=0.01125+0.3*(0-0.534)*0.534*(0-0.534)*2=迭代#3......注:一共6行数据,迭代后重新从第一行开始,则6次迭代为一个epoch(全部样本训练一次)
"""
print()
#导入包
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
from sklearn import linear_model
import matplotlib.pyplot as plt
%matplotlib inlinefrom sklearn.model_selection import train_test_split,cross_val_score
df=pd.read_excel("bankloan_binning.xlsx")
print(df.head(1))
xtrain,xtest,ytrain,ytest=train_test_split(df.iloc[:,[2,3,4,5,6,7,8,9]],df.iloc[:,-1],test_size=0.2,random_state=0)#train_size=0.8
xtrain1,xvalid,ytrain1,yvalid=train_test_split(xtrain,ytrain,test_size=0.2,random_state=0)#train_size=0.8
===============1.python数据处理标准流程===============
#第一、导入包和对应的类
#第二、实例化
#第三、拟合数据
#第四、评估模型
#第五、预测评分#分类预测
from sklearn.linear_model import SGDClassifier
sgd_clf=SGDClassifier(loss='log',random_state=123)
sgd_clf.fit(xtrain,ytrain)#拟合训练集数据
sgd_clf.score(xtest,ytest)#非监督模型是transform
y_sgd=sgd_clf.predict(xtest)#predict_probafrom sklearn.metrics import classification_report
print(classification_report(ytest,y_sgd,target_names=['非违约','违约']))sgd_clf.coef_,sgd_clf.intercept_
# 老(新)样本预测
# x1=np.array([[2,1,3.767992,3.90,0.504108,3.767992,2.90,1.504108],
#              [3,4,0.767992,3.90,1.504108,3.767992,0.90,1.504108]])
# pdata=pd.DataFrame(sgd_clf.predict_proba(x1))#predict_proba需要logsitic回归
# pdata.head(6)

#==================2.模型参数===================
sgd_clf=SGDClassifier(loss='hinge',penalty='l2',alpha=0.0001,l1_ratio=0.15,fit_intercept=True,max_iter=1000,tol=0.001,shuffle=True,verbose=0,epsilon=0.1,n_jobs=None,random_state=None,learning_rate='optimal',eta0=0.0,power_t=0.5,early_stopping=False,validation_fraction=0.1,n_iter_no_change=5,class_weight=None,warm_start=False,average=False,                 )
print("""
#特点:1.SGD允许minibatch(在线/核外oob)学习,使用partial_fit方法;2.拟合大型列和行;3.稀疏数据处理(loss参数和罚值控制),4.SGDClassifier支持多分类,依”one-vs-all”的形式
#损失函数:loss=”hinge”: (soft-margin)线性svm;loss=”modified_huber”:稳健的异常值处理;loss=”log”:logistic回归loss=”perceptron”:感知器算法其他损失函数如回归张的'huber', 'epsilon_insensitive'
#惩罚项(或正则化):l1与elasticnet可用于稀疏数据penalty=”l2”: 对coef_的L2范数罚项;penalty=”l1”: L1范数罚项;penalty=”elasticnet”: L1与L2的convex组合;
#alpha:乘以正则项的常数或变量(最优化算法);
#l1_ratio:弹性网混合参数,默认为0.15。取值[0,1],l1_ratio=0为L2,l1_ratio=1则为L1,注:(1-l1_ratio)*L2+l1_ratio*L1
#max_iter: int,可选(默认=1000):遍历训练数据的最大值(又名epochs)。只影响fit(),对partial_fit无效;
#shuffle : bool,默认值为True,是否在每次epoch后随机打乱训练数据(洗牌)。
#epsilon : float,如果loss='huber'或 'epsilon_insensitive'或 'squared_epsilon_insensitive'时可用;如果预测和观测值间的差值小于此阈值,则忽略,即异常值修正参数;
#learning_rate : string,默认'optimal';learning_rate='constant':eta = eta0,注eta0为初始学习率;learning_rate='optimal':eta = 1.0 / (alpha * (t + t0)),<---最好的学习率learning_rate='invscaling':eta = eta0 / pow(t, power_t),注power_t选项另外指定;learning_rate='adaptive':如果误差持续下降,则eta = eta0,否则(n_iter_no_change等参数满足)学习率除以5;
#validation_fraction : float, default=0.1,验证集比例;
#warm_start : bool,默认False,如果True,调用之前的解决拟合值作为初始化,否则清除;
""")

Python统计分析--- 5.统计法与随机梯度下降(SGD)相关推荐

  1. 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

    批量梯度下降(BGD).随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解 </h1><div class="clear"></div> ...

  2. 随机梯度下降(SGD)与经典的梯度下降法的区别

    随机梯度下降(SGD)与经典的梯度下降法的区别 经典的优化方法,例如梯度下降法,在每次迭代过程中需要使用所有的训练数据,这就给求解大规模数据优化问题带来挑战. 知识点:随机梯度下降法(SGD).小批量 ...

  3. 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)及 batch、epoch、iteration

    先介绍一下梯度下降:梯度下降是一种用于机器学习训练参数的一种优化方法.对损失函数进行梯度下降,"梯度"指误差梯度或误差斜率,"下降"指沿着误差斜率移动到误差较小 ...

  4. 深度学习中的随机梯度下降(SGD)简介

    随机梯度下降(Stochastic Gradient Descent, SGD)是梯度下降算法的一个扩展. 机器学习中反复出现的一个问题是好的泛化需要大的训练集,但大的训练集的计算代价也更大.机器学习 ...

  5. python实现随机梯度下降(SGD)

    使用神经网络进行样本训练,要实现随机梯度下降算法.这里我根据麦子学院彭亮老师的讲解,总结如下,(神经网络的结构在另一篇博客中已经定义): def SGD(self, training_data, ep ...

  6. 使用随机梯度下降SGD的BP反向传播算法的PyTorch代码实现

    Index 目录索引 写在前面 PyTorch的 .data() PyTorch的 .item() BP with SGD的PyTorch代码实现 参考文章 写在前面 本文将用一个完整的例子,借助Py ...

  7. python拟合曲线(小批量随机梯度下降)

    深度学习书籍参考:https://tangshusen.me/Dive-into-DL-PyTorch/#/read_guide import numpy as np from matplotlib ...

  8. 强化学习(七) - 函数近似方法 - 随机梯度下降, 半梯度下降,及瓦片编码(Tile Coding)实例

    函数近似方法 7.1 目标预测(VE‾\overline{VE}VE) 7.2 随机梯度下降和半梯度下降 例7.1: 1000态随机行走的状态收敛 7.3 线性近似 7.4 线性方法的特征构造 7.4 ...

  9. sklearn自学指南(part24)--随机梯度下降

    学习笔记,仅供参考,有错必纠 文章目录 随机梯度下降 分类 回归 稀疏数据的随机梯度下降 复杂性 停止准则 使用贴士 数学原理 随机梯度下降 随机梯度下降(SGD)是一种简单但非常有效的方法来拟合凸损 ...

最新文章

  1. 【持续加精】几种强哥墙裂推荐的缓冲效果,各有千秋、各取所需
  2. centos7-同步时间
  3. keepalive 配合mysql主主复制
  4. [转]javascript中style.left和offsetLeft的使用
  5. android触摸外部关闭键盘,如何隐藏Android上的软键盘,点击外部EditText?
  6. 安装成功后python报错_python安装Graphviz后报错及解决方法
  7. ubuntu下手动安装jdk6
  8. java final static
  9. 10个前端开发人员必须知道的CSS框架
  10. mysql最大述_MySQL优化(1):Mysql简述
  11. 全参考客观视频质量评价方法 (MSE, PSNR,SSIM)原理
  12. 给Ubuntu安装MacOS主题
  13. TGS.Avizo.v5.0 1CD
  14. Lineage Logistics完成对 UTI Forwarding的收购
  15. Live555本地保存H264/PCM视频音频帧附加SPS/PPS
  16. 怎么修改背景图片大小的HTML代码,css如何改变背景图片大小?
  17. Linux kali系统使用fcrackzip/rarcrack破解zip/rar(或者zip 7z)类型的加密压缩文件
  18. win10计算机拒绝访问,Win10文件访问被拒绝如何解决?
  19. 美团点评广告实时索引的设计与实现
  20. 问题 B: 加油站(贪心+模拟)

热门文章

  1. c语言程序设计 黄建灯,C语言程序设计教学改革
  2. docker安装mysql8,Docker安装Mysql8.0,并配置忽略大小写
  3. 临时手机验证码_实用网站(一)短信验证码 临时网盘 临时邮箱
  4. anacondapythonyolo3配置_Windows anaconda 运行yolov3
  5. 仿微博国际版首页点击显示分组列表(popupwindow悬浮阴影效果)
  6. 编写程序,使用指针把一个 int 型数组的所有元素设置4.18: 为 0。
  7. rtthread 串口dma接收_RT-Thread 串口DMA使用笔记--STM32F207
  8. TCP/IP数据包结构分解
  9. AppStore发布产品步骤
  10. java list 面试题_java【集合】面试题