逻辑回归-5. scikit-learn中的逻辑回归

scikit-learn中的逻辑回归

构造数据集

import numpy
import matplotlib.pyplot as plt

numpy.random.seed(666)
X = numpy.random.normal(0,1,size=(200,2))
# 决策边界为二次函数
y = numpy.array(X[:,0]**2 + X[:,1] < 1.5,dtype='int')
# 随机改变20个点,目的是添加噪点
for _ in range(20):
    y[numpy.random.randint(200)] = 1

plt.scatter(X[y==0,0],X[y==0,1],color='red')
plt.scatter(X[y==1,0],X[y==1,1],color='blue')
plt.show()

用scikit-learn中的逻辑回归:

from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

def PolynomialLogisticRegression(degree):
    return Pipeline([
        ('poly',PolynomialFeatures(degree=degree)),
        ('stand_scalor',StandardScaler()),
        ('log_reg',LogisticRegression())
    ])

x_train,x_test,y_train,y_test = train_test_split(X,y)

当多项式为2阶时

poly_log_reg = PolynomialLogisticRegression(2)
poly_log_reg.fit(x_train,y_train)


算法准确率为92%
绘制决策边界(决策边界绘制方法见上篇):

当多项式为20阶时:

可以看出,随着多项式项的增加,模型变得过拟合了

改变模型正则化的参数

scikit-learn中使用正则化的方称为:\(C\cdot J(\theta )+L1/L2\),其中默认系数C为1,正则化项为L2

  • 减小系数C,增大正则化项的比例
def PolynomialLogisticRegression(degree,penalty='l2',C=1):
    return Pipeline([
        ('poly',PolynomialFeatures(degree=degree)),
        ('stand_scalor',StandardScaler()),
        ('log_reg',LogisticRegression(penalty=penalty,C=C))
    ])

poly_log_reg2 = PolynomialLogisticRegression(20,penalty='l2',C=0.1)
poly_log_reg2.fit(x_train,y_train)

  • 改变正则项L2为L1
poly_log_reg3 = PolynomialLogisticRegression(20,penalty='l1',C=0.1)
poly_log_reg3.fit(x_train,y_train)

注:scikit-learn中的逻辑回归中,损失函数系数C,多项式阶数,正则化项等都是算法的超参数,在具体的应用中,需要使用网格搜索,得到最合适的参数组合。

原文地址:https://www.cnblogs.com/shuai-long/p/11503567.html

时间: 2024-07-29 12:22:29

逻辑回归-5. scikit-learn中的逻辑回归的相关文章

光电效应陈述中的逻辑矛盾

经过<科普中国>编辑审定:光电效应是物理学中一个重要而神奇的现象.在高于某特定频率的电磁波照射下,某些物质内部的电子会被光子激发出来而形成电流,即光生电现象(即光电效应).这种陈述,其中的问题出在哪里? 历史事实是:1887年,赫兹发现光电效应现象.但是,经典物理学的解释与实验数据不符.按照传统物理观念,光照释放出的电子数量与入射光的振幅成比例,可是,当入射光逐渐变弱时,释放出的光电子仍然存在,与实验数据不符. 1905年,年仅27岁的"小毛头"爱因斯坦提出一个大胆设想:在

linux 中的逻辑卷

一.简单介绍: MD, DM:是内核中两种实现逻辑设备的模块 MD: meta device,multidisk,逻辑设备:软件raid DM: Device Mapper 设备映射,逻辑设备: LVM2(动态增减) 二.新建逻辑卷 1.创建分区: fdisk -l /dev/sdb  /dev/sdc      #n--->p--->t--->w   调整类型为8e 2.更新内核信息 partx -a /dev/DEVICE partprobe  cat /proc/partition

浅析白盒测试中的逻辑覆盖测试

在白盒测试中,逻辑覆盖测试是使用较多的方法.按照其对测试的有效程度,又将其划分为由弱到强的6种:语句覆盖.判定覆盖.条件覆盖.判定-条件覆盖.条件组合覆盖.路径覆盖. 在这里,不深究各个覆盖的优缺点,仅仅根据一个实际例子来看看如何写出6种覆盖的测试用例. public void function(int a, int b, int c) { if ((a > 1) && (b == 0)) { c /= a; } if ((a == 5) || (c > 1)) { c +=

PHP和Javascript中的逻辑操作符&amp;&amp;和||的比较

几乎所有的语言都有&&(且)和||(或)的逻辑操作符,&&用于判断多个表达式的时候,如果为真(true),则继续判断下一个表达式,如果为假(false),则停止表达式解析,即只有当所有表达式都为真(true),才返回真(true),如果某一个表达式为假(false),则结果就(false):而||(或)恰好相反,也是对多个表达式依次判断,如果表达式为真(true),则终止表达式的逻辑判断,其结果为真(true).这两个逻辑操作符都存在短路这个行为: &&判断

[SQL] 理解SQL SERVER中的逻辑读,预读和物理读

SQL SERVER数据存储的形式 在谈到几种不同的读取方式之前,首先要理解SQL SERVER数据存储的方式.SQL SERVER存储的最小单位为页(Page).每一页大小为8k,SQL SERVER对于页的读取是原子性,要么读完一页,要么完全不读,不会有中间状态.而页之间的数据组织结构为B树(请参考我之前的博文).所以SQL SERVER对于逻辑读,预读,和物理读的单位是页. SQL SERVER一页的总大小为:8K 但是这一页存储的数据会是:8K=8192字节-96字节(页头)-36字节(

SQL Server 中的逻辑读与物理读

首先要理解逻辑读和物理读: 预读:用估计信息,去硬盘读取数据到缓存.预读100次,也就是估计将要从硬盘中读取了100页数据到缓存. 物理读:查询计划生成好以后,如果缓存缺少所需要的数据,让缓存再次去读硬盘.物理读10页,从硬盘中读取10页数据到缓存. 逻辑读:从缓存中取出所有数据.逻辑读100次,也就是从缓存里取到100页数据. SQL Server存储的最小单位是页,每一页大小为8K,SQL Server对于页的读取是原子性的,要么读完一页,要么完全不读.即使是仅仅要获得一条数据,也要读完一页

js中的逻辑或和逻辑与

a=''||'abc';                              //返回什么?  'abc' a=1||2;                                  //返回什么?   1 var a=0; var b=++a||++a ;        //a=1;b=1; b=''&&'abc'                             //返回什么?  ’‘ b=1&&2                          

Web安全测试中常见逻辑漏洞解析(实战篇)

Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,导致用户A可以操作其他人的信息.? 逻辑漏洞挖掘一直是安全测试中"经久不衰"的话题.相比SQL注入.XSS漏洞等传统安全漏洞,现在的攻击者更倾向于利用业务逻辑层的应用安全问题,这类问题往往危害巨大,可能造成了企业的资产损失和

在WPF中减少逻辑与UI元素的耦合

原文:在WPF中减少逻辑与UI元素的耦合             在WPF中减少逻辑与UI元素的耦合 周银辉 1,    避免在逻辑中引用界面元素,别把后台数据强加给UI  一个糟糕的案例 比如说主界面上有一个显示当前任务状态的标签label_TaskState,我们会时常更新该标签以便及时地将任务状态通知用户.那么很糟糕的一种假设是我们的代码中会到处充斥着这样的语句段this.label_TaskState .Content = this.GetStateDescription(TaskSta