精华内容
下载资源
问答
  • 第七章 逻辑回归 - 多元逻辑回归

    千次阅读 2020-03-10 21:41:43
    第七章 逻辑回归 - 多元逻辑回归、一对多分类

    0导入相关库

    import numpy as np
    import pandas as pd
    
    from sklearn import metrics # 评估
    import statsmodels.api as sm
    

    1 加载数据

    df=pd.read_csv('Regression/Regression7/multi_logit.csv',header=None)
    
    df.columns = ["y", "x1", "x2"]
    
    features = ["x1", "x2"]
    labels = ["y"]
    
    df.info()
    # df.sample(frac=0.05) # 随机取样(分数 四舍五入)
    df.sample(n=5) # 5行
    

    在这里插入图片描述

    2 一对多分类

    from sklearn.linear_model import LogisticRegression
    
    model = LogisticRegression(multi_class='ovr', solver='sag',
                max_iter=1000, random_state=42)
    model.fit(df[features], df[labels])
    
    print('系数:\n', model.coef_, '\n')
    print('截距:\n', model.intercept_)
    

    在这里插入图片描述

    2.1 分类概率

    prob = model.predict_proba(df[features])
    pd.DataFrame(prob)
    

    在这里插入图片描述

    2.2 分类汇总情况

    pred = model.predict(df[features])
    print(metrics.classification_report(df['y'], pred))
    

    在这里插入图片描述

    2.3 混淆矩阵

    confusion = metrics.confusion_matrix(df['y'], pred)
    confusion
    

    在这里插入图片描述

    plt.matshow(confusion)
    plt.title('混淆矩阵')
    plt.colorbar() 
    plt.ylabel('预测')
    plt.xlabel('实际')
    plt.show()
    

    在这里插入图片描述

    3 多元逻辑回归

    model = LogisticRegression(multi_class='multinomial', solver='sag',
                max_iter=1000, random_state=42)
    model.fit(df[features], df[labels])
    
    print('系数:\n', model.coef_, '\n')
    print('截距:\n', model.intercept_)
    

    在这里插入图片描述

    3.1 分类概率

    prob = model.predict_proba(df[features])
    pd.DataFrame(prob)
    

    在这里插入图片描述

    3.2 分类汇总情况

    pred = model.predict(df[features])
    print(metrics.classification_report(df['y'], pred))
    

    在这里插入图片描述

    3.3 混淆矩阵

    confusion = metrics.confusion_matrix(df['y'], pred)
    confusion
    

    在这里插入图片描述

    plt.matshow(confusion)
    plt.title('混淆矩阵')
    plt.colorbar() 
    plt.ylabel('预测')
    plt.xlabel('实际')
    plt.show()
    plt.tight_layout()
    

    在这里插入图片描述

    展开全文
  • 本文从统计的角度解释了二元逻辑回归和多元逻辑回归两个经典模型背后的数学理论,以及其是如何和机器学习联系上的




    概述

    以下是此篇文章要用的包

    # 加载包
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    sns.set_style('darkgrid')
    

    两个重要函数


    二元逻辑回归的出发点是sigmoid函数
    S(x)=11+ex=ex1+ex S(x)= \frac{1}{1+e^{-x}}= \frac{e^{x}}{1+e^{x}}

    Sigmoid函数能将实数域的连续数映射到0,1区间,概率的取值范围就在0,1之间,因此可以用来做概率的预测。

    以下是Sigmoid函数的代码和图像

    x=np.arange(-10,10)
    y=1/(1+np.exp(-x))
    plt.plot(x,y)
    

    Output:



    多元逻辑回归的出发点是softmax函数
    S(x)=exij=1kexj S(x)=\frac{e^{x_i}}{\sum_{j=1}^{k}e^{x_j}}
    Softmax函数也是将实数域的连续数映射到0,1区间,进而可以理解为是概率。

    以下是softmax函数的代码和图像

    图像的特点:

    • 设向量x=[0,1,2,3,…,49],其输出也是一个向量y
    • 这里Softmax函数会将x里的每个数映射到0,1区间
    • 并且y里元素加和为一
    • 数越大,其输出也越大,即概率越大。
    x=np.arange(0,50)
    y=np.exp(x)/np.sum(np.exp(x))
    plt.plot(x,y)
    print('the sum of y={}'.format(y.sum()))
    

    Output:
    the sum of y=1.0


    预测的基本思想


    我们想处理分类问题,最基本的统计模型便是逻辑回归,之所以使用它,最主要的原因是其输出是在0,1之间。

    注意,我们并不是直接输出类别编号,而是一个概率值

    然后我们会根据情况的不同来确定一个阈值,通常这个阈值定在0.5。比如,二元模型中(类别0和1),我的输出是P(Y=1)=0.75(0.75>0.5),则认为此时Y是属于类别1的。




    二元逻辑回归


    线性模型的简单回顾

    要解释二元逻辑回归,我们得先来了解下什么是线性模型

    首先这个模型建立在两个个假设上

    • 假设yyXX之间是一个线性关系
    • yi(i=1,2,3,...,n)y_i(i=1,2,3,...,n)是独立同分布

    yyXX之间的线性关系

    y=Xβ y=Xβ

    因变量yy是一个nx1向量

    y=[y1y2yn] y= \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots\\ y_n \end{matrix} \right]

    带截距项的自变量XX是一个nx(m+1)的矩阵
    X=[1x11x12...x1m1x21x21...x2m1xn1xn2...xnm] X= \left[ \begin{matrix} 1&x_{11}&x_{12}&...&x_{1m}\\ 1&x_{21}&x_{21}&...&x_{2m}\\ \vdots&\vdots&&\vdots\\ 1&x_{n1}&x_{n2}&...&x_{nm} \end{matrix} \right]

    带截距项的参数ββ是一个mx1向量
    β=[β0β1β2βm] β= \left[ \begin{matrix} β_0 \\ β_1 \\ β_2 \\ \vdots\\ β_m \end{matrix} \right]

    从线性回归到二元逻辑回归

    对于二值因变量yiy_i(yi=0y_i=0yi=1y_i=1),我们的假设是yi(i=1,2,...,n)y_i(i=1,2,...,n) 独立同分布Bernouli分布,即

    yiBernouli(P(yi=1)) y_i\sim Bernouli (P(y_i=1))
    首先我们想到用最基本的线性回归来估计yiy_i,在Bernouli分布中,yiy_i的均值是P(yi=1)P(y_i= 1),因此我们的预测模型为

    E(yi)=P(yi=1)=xiβ E(y_i) = P(y_i= 1) =x_iβ

    但这样做的缺点就是xiβx_iβ的取值可能会落在[0,1]之外,受Sigmoid函数的启发,我们将预测模型改成
    E(yi)=P(yi=1)=11+exiβ E(y_i) = P(y_i = 1) =\frac{1}{1+e^{-x_iβ}}
    β=(β0,β1,βm)xi=(1,xi1,xi2,,xim)xiβ=β0+xi1β1+...+ximβmβ = (β_0, β_1, … β_m)',且 x_i= (1, x_{i1}, x_{i2}, … ,x_{im}),即x_iβ=β_0+x_{i1}β_1+...+x_{im}β_m


    参数怎么估计

    前面知道YiY_i 服从Bernouli分布,既然分布已知了,我们自然会想到用极大似然估计的方法去估计参数,此时的似然函数是
    L(β)=f(y1,y2,..,yn)=j=1npiyj(1pi)1yi=j=1n(pi1pi)yi(1pi) L(β)=f(y_1,y_2,..,y_n)=\prod_{j=1}^np_i^{y_j}(1-p_i)^{1-y_i}=\prod_{j=1}^n(\frac{p_i}{1-p_i})^{y_i}(1-p_i)
    其中pi=P(Yi=1)=11+exiβp_i=P(Y_i = 1)=\frac{1}{1+e^{-x_iβ}},又发现这样的关系Logpi1pi=xiβLog\frac{p_i}{1-p_i}=x_iβ,为了之后计算方便,先对上式两边取对数得到

    LogL(β)=Logf(y1,y2,..,yn)=j=1nyj(Logpi)+(1yj)(Log(1pi))(1) LogL(β)=Logf(y_1,y_2,..,y_n)=\sum_{j=1}^n y_j(Logp_i)+(1-y_j)(Log(1-p_i))\tag1 =j=1nyjLogpi1pi+Log(1pi)=j=1nyjxiβLog(1+exiβ)(2) =\sum_{j=1}^ny_jLog\frac{p_i}{1-p_i}+Log(1-p_i)=\sum_{j=1}^ny_jx_iβ-Log(1+e^{x_iβ})\tag2
    最大化这个似然函数,并取此时满足情况的ββ作为参数的估计值β^\widehat{β},就能得到预测模型E(Yi)=P(Yi=1)=11+exiβ^E(Y_i) = P(Y_i= 1) =\frac{1}{1+e^{-x_i\widehatβ}}了,而为什么要最大化这个似然函数呢,也就是极大似然估计的意义在哪?

    • 因为我们的假设是YiY_i独立同分布,这里的似然函数实质就是Yi(i=1,2,...,n)Y_i(i=1,2,...,n)的联合密度函数,当联合密度函数最大的时候,也就是概率最大的时候,事件最可能发生的时候,所以我们会想去最大化似然函数。

    我想大部分读者都是对机器学习感兴趣来的,那这我们用一个机器学习里的名词,代价函数(Cost function),来进行接下来的步骤,把(1)式做个小小修改就变成了,大家熟悉的代价函数

    Cost(β)=1nj=1nyj(Logpi)+(1yj)(Log(1pi))(3) Cost(β)=-\frac{1}{n}\sum_{j=1}^n y_j(Logp_i)+(1-y_j)(Log(1-p_i))\tag3

    其实质就是将似然函数的对数函数做了一个平均,最大化似然函数的对数函数,也就是最小化这个代价函数

    如果想要更严格地估计,我们还可以在这个基础上,再添加惩罚项(Penalty),这个步骤也叫正则化(Regularization),常见的惩罚项是一范数和二范数,也分别叫做Lasso和Ridge,叫啥都无所谓,实质都是数学。

    CostL1(β)=Cost(β)+λnj=1mβjCostL2(β)=Cost(β)+λ2nj=1mβj2 Cost_{L_1}(β)=Cost(β)+\frac{λ}{n}\sum_{j=1}^m|β_j|\\ Cost_{L_2}(β)=Cost(β)+\frac{λ}{2n}\sum_{j=1}^mβ_j^2

    明白了这层关系后,进一步的问题就在于如何最小化代价函数,并且得到其对应的参数ββ

    求参数ββ的方法常用的有两个,一个是梯度下降(Gradient descent),另一个是牛顿迭代(Newton’s Iteration)。


    梯度下降

    对(3)式里的代价函数求导,而(3)式就是把(2)式做了一个变换(2)n-\frac{(2)}{n},因此

    Cost(β)β=1n(2)β=1nj=1nxi(yjpi) \frac{\partial Cost(β)}{\partial β}=-\frac{1}{n}\frac{\partial (2)}{\partial β}=-\frac{1}{n}\sum_{j=1}^nx_i(y_j-p_i)

    和之前一样,这里pi=P(Yi=1)=11+exiβp_i=P(Y_i = 1)=\frac{1}{1+e^{-x_iβ}}

    xix_iyjy_j都是已知,给定初值β(0)=[β0(0),β1(0),β2(0),...,βm(0)]β^{(0)}=[β_0^{(0)},β_1^{(0)},β_2^{(0)},...,β_m^{(0)}]'后,得到pi(0)p_i^{(0)},因此参数βm(0)β_m^{(0)}的更新可以写成
    βm(t)=βm(t1)lCost(β(t1))β(t1)=βm(t1)l1nj=1nxi(yjpi(t1))(4) β_m^{(t)}=β_m^{(t-1)} - l·\frac{\partial Cost(β^{(t-1)})}{\partial β^{(t-1)}}\\ =β_m^{(t-1)} - l·\frac{1}{n}\sum_{j=1}^nx_i(y_j-p_i^{(t-1)})\tag4
    写成矩阵的形式
    β(t)=β(t1)l1nXT(yp) β^{(t)}=β^{(t-1)}-l·\frac{1}{n}·X^T·(y-p)
    其中ll学习速度(learning rate),XX是nx(m+1)的矩阵,yy是nx1的向量,pp是nx1的向量(p=[p1,p2,...,pn]p=[p_1,p_2,...,p_n]'),在实际的操作中,我们会多次取不同的初值,由此希望达到全局最小值。

    以下是梯度下降的简单实现,其中省略了计算pp的函数

    def update_bata(X, y, beta, l):
    	'''
    	X: 自变量是一个(n,m+1)的矩阵
    	y: 因变量是一个(n,1)的向量
    	beta: 参数β是一个(m+1,1)的向量
    	l: 学习速率
    	'''
        n = len(y)
    
        #1 由(4)的算式得到p,设函数名为cal_p
        p= cal_p(X, beta)
    
        #2 (4)的一部分
        gradient = np.dot(X.T,  y-p)
    
        #3 Take the average cost derivative for each feature
        gradient /= N
    
        #4 - Multiply the gradient by our learning rate
        gradient *= l
    
        #5 - Subtract from our weights to minimize cost
        beta -= gradient
    
        return beta
    

    牛顿迭代

    可以说这个方法是从泰勒展开得到的灵感,f(x)f(x)xkx_k处的展开式f(x)=f(xk)+f(xk)(xxk)+12!f(xk)(xxk)2+...f(x)=f(x_k)+f'(x_k)(x-x_k)+\frac{1}{2!}f''(x_k)(x-x_k)^2+...,我们想寻找满足f(x)=0f(x)=0xx,即牛顿迭代的终点是f(x)f(x)收敛到0

    在这我们只取前两项,h(x)=f(xk)+f(xk)(xxk)h(x)=f(x_k)+f'(x_k)(x-x_k),我们认为h(x)h(x)f(x)f(x)的一个近似,那么有f(x)=h(x)=0f(x)=h(x)=0,得到
    x=xkf(xk)f(xk) x=x_k-\frac{f(x_k)}{f'(x_k)}
    进而有迭代
    xk+1=xkf(xk)f(xk) x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}
    在我们的二元逻辑回归中,代价函数就是这里的f(x)f(x),参数ββ更新方法是
    β(k)=β(k1)cost(β(k1))cost(β(k1)) β^{(k)}=β^{(k-1)}-\frac{cost(β^{(k-1)})}{cost'(β^{(k-1)})}
    直至代价函数趋近于0。这里做一个区分,梯度下降方法中的代价函数不一定趋近于0。




    多元逻辑回归


    模型解释

    在这个模型中,自变量,因变量和参数的样子如下,可以看到yiy_i的取值由两元变成了多元,多元逻辑回归有次序多元逻辑回归无序多元逻辑回归之分,本文这只讨论无序的情况。

    因变量yy是一个nx1向量,yiy_{i}∈{w1,w2,w3,...,wKw_1,w_2,w_3,...,w_K},i=1,2,3,...,ni=1,2,3,...,n

    y=[y1y2yn] y= \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots\\ y_n \end{matrix} \right]

    带截距项的自变量XX是一个nx(m+1)的矩阵
    X=[1x11x12...x1m1x21x21...x2m1xn1xn2...xnm] X= \left[ \begin{matrix} 1&x_{11}&x_{12}&...&x_{1m}\\ 1&x_{21}&x_{21}&...&x_{2m}\\ \vdots&\vdots&&\vdots\\ 1&x_{n1}&x_{n2}&...&x_{nm} \end{matrix} \right]

    带截距项的参数βkβ_k是一个mx1向量,k=1,2,3,....,Kk=1,2,3,....,K
    βk=[βk0βk1βk2βkm] β_k= \left[ \begin{matrix} β_{k0} \\ β_{k1} \\ β_{k2} \\ \vdots\\ β_{km} \end{matrix} \right]

    与二元逻辑回归的另一个区别就是,多元逻辑回归中用的是softmax函数。

    于是我们的自变量和因变量的概率之间的关系可以表示如下

    P(yi=wk)=exiβkj=1Kexiβj(5) P(y_i=w_k)=\frac{e^{x_iβ_k}}{\sum_{j=1}^{K}e^{x_iβ_j}}\tag{5}

    参数的估计

    这个无序多元逻辑回归模型有以下几个事实

    • 我们总共进行了n次试验
    • 每次试验的可能结果有K种,分别是yi(i=1,2,3,...n)=w1,w2,w3,...wKy_i(i=1,2,3,...n)=w_1,w_2,w_3,...w_K
    • 每种结果发生的概率pkp_k如(5)式所示,pkP(yi=wk)p_k\triangleq P(y_i=w_k)
    • 并且(5)具有这样的特点i=1Kpi=1\sum_{i=1}^Kp_i=1
    • n次试验中,结果kk发生次数nkn_ki=1nI(yi=k)\sum_{i=1}^{n}I(y_i=k),这里I(yi=k)I(y_i=k)指示函数(indicator function),当yi=ky_i=k成立时取1,不成立时取0

    通过上面的分析我们知道,当我们知道无序多元逻辑回归实质上是一个多项分布
    P(n1,n2,n3,...,nKβ1,β2,...βK)=n!n1!n2!n3!...nK!p1n1p2n2...pKnK(6) P(n_1,n_2,n_3,...,n_K|β_1,β_2,...β_K)=\frac{n!}{n_1!n_2!n_3!...n_K!}p_1^{n_1}p_2^{n_2}...p_K^{n_K}\tag6

    将(6)式两边取对数,有

    LogP(n1,n2,n3,...,nKβ1,β2,...βK)k=1KnkLogpk=k=1Ki=1nI(yi=k)Logexiβkj=1Kexiβj(7) LogP(n_1,n_2,n_3,...,n_K|β_1,β_2,...β_K) \propto \\ \sum_{k=1}^Kn_kLogp_k=\sum_{k=1}^K\sum_{i=1}^{n}I(y_i=k)Log\frac{e^{x_iβ_k}}{\sum_{j=1}^{K}e^{x_iβ_j}}\tag7

    \propto是正比符号,省略的部分是常数求导之后为零,因此这里就直接省掉了

    极大似然估计的方法是最大化(7)式,这里我们采用梯度下降的办法,于是我们的损失函数可以写成

    L(β)=k=1Ki=1nI(yi=k)Logexiβkj=1Kexiβj(8) L(β)=-\sum_{k=1}^K\sum_{i=1}^{n}I(y_i=k)Log\frac{e^{x_iβ_k}}{\sum_{j=1}^{K}e^{x_iβ_j}}\tag8

    先对log(pk)log(p_k)求导,pkp_k如(5)式所示,\sumj=1Kexiβj\sum_{j=1}^{K}e^{x_iβ_j}的简写,矩阵的求导请参考我的另一篇博文统计里的矩阵导数

    pkβk=exiβkexiβkxiexiβkexiβkxi2=xi(1pk) \frac{\partial p_k}{\partial β_k}=\frac{\sum}{e^{x_iβ_k}} · \frac{e^{x_iβ_k}·x_i·\sum-e^{x_iβ_k} ·e^{x_iβ_k}· x_i}{\sum^2}\\ =x_i(1-p_k)
    pkβm(mk)=exiβk0exiβkexiβkxi2=xipk \frac{\partial p_k}{\partial β_m}(m\neq k)=\frac{\sum}{e^{x_iβ_k}} · \frac{0·\sum-e^{x_iβ_k} ·e^{x_iβ_k}· x_i}{\sum^2}\\ =-x_i·p_k

    yi=ky_i=k对应的参数是βkβ_k,在更新参数βkβ_k时,会用βkβ_k的偏导。简单的说,m=km=kyi=ky_i=k是一回事。综上所述
    pkβm=exiβk0exiβkexiβkxi2=xi(I(yi=k)pk) \frac{\partial p_k}{\partial β_m}=\frac{\sum}{e^{x_iβ_k}} · \frac{0·\sum-e^{x_iβ_k} ·e^{x_iβ_k}· x_i}{\sum^2}\\ =x_i(I(y_i=k)-p_k)

    所以(8)式的导数
    L(β)βk=i=1nxi(I(yi=k)pk) \frac{\partial L(β)}{\partial β_k}=-\sum_{i=1}^{n}x_i(I(y_i=k)-p_k)



    以上就是全部内容了,笔者从统计的角度大致解释了下机器学习中逻辑回归损失函数的来源,希望能帮助到各位读者

    展开全文
  • sigmoid function: 二项逻辑回归 (binomial logistic regression model): ...多元逻辑回归(multi-nomial logistic regression model):多分类,Y的取之集合为{1,2,...,K} softmax : ...

    sigmoid function:

    f(x)=\frac{1}{1+e^{-x}}

    二项逻辑回归 (binomial logistic regression model):

    P(Y=1|x) = \frac {exp(w \cdot x+b)}{1+exp(w\cdot x+b)}

    P(Y=0|x) = \frac {1}{1+exp(w\cdot x+b)}

    多元逻辑回归(multi-nomial logistic regression model):多分类,Y的取之集合为{1,2,...,K}

    P(Y=k|x)=\frac{exp(w_k \cdot x)}{1+\sum_{k=1}^{K-1}exp(w_k\cdot x)},k=1,2,...,K-1
    P(Y=K|x)=\frac{1}{1+\sum_{k=1}^{K-1}exp(w_k\cdot x)}

    softmax :

    P(y^{(i)}=j|x^{(i)};\theta)=\frac {exp( \theta^T_jx^{i})}{\sum_{l=1}^k exp( \theta^T_jx^{i})}

    展开全文
  • 多元逻辑回归与多元回归区别What do James Bond, Deepak Chopra, and Einstein have in common? They browse automatically in multiverses. You can, too, and make it harder to be tracked. James Bond,Deepak ...

    多元逻辑回归与多元回归区别

    What do James Bond, Deepak Chopra, and Einstein have in common? They browse automatically in multiverses. You can, too, and make it harder to be tracked.

    James Bond,Deepak Chopra和Einstein有什么共同点? 他们自动浏览多元宇宙。 您也可以,使其更难以跟踪。

    It all started reading this article in DEV.to.

    一切都开始在DEV.to中阅读本文

    Firefox is indeed a great browser, I said in the comment section. And mentioned my favorite add-on.

    在评论部分中说Firefox确实是一个很棒的浏览器。 并提到了我最喜欢的附加组件。

    树样式标签,我最喜欢的附件 (Tree Style Tabs, my favorite add-on)

    I mentioned how I can’t live without my favorite add-on Tree Style Tabs.

    我提到了如果没有我最喜欢的附加树样式选项卡,我将无法生存。

    This add-on allows me to comfortably see all of my open tabs in a vertical column to the left of the browser rather than on an unreadable list on the top of the browser:

    这个附加组件使我可以在浏览器左侧的垂直列中舒适地查看所有打开的选项卡,而不是浏览器顶部的不可读列表中:

    Image for post

    As you can see in the image, new tabs open in a tree-style fashion. This conveniently puts some order in an otherwise hectic sea of tabs. It also adds readability and makes it easier to find a tab-needle in the haystack.

    如您在图像中看到的,新选项卡以树形样式打开。 这可以方便地在繁忙的制表符海洋中下订单。 它还增加了可读性,并使在干草堆中更容易找到a针。

    If you need horizontal space back, the sidebar can be conveniently closed/opened using a keyboard shortcut, like a boss.

    如果需要向后水平空间,则可以使用键盘快捷键(例如老板)方便地关闭/打开侧栏。

    If you want, you can expand the sidebar width and read the whole title of the tab. Something impossible in the default crunched upper row of tabs.

    如果需要,可以扩展侧栏的宽度并阅读选项卡的整个标题。 默认情况下,上面显示的所有行中都是不可能的。

    简介:容器标签 (Intro: Container tabs)

    So what are container tabs?

    那么什么是容器标签?

    Firefox’s Containers are like profiles, allowing you to segregate browsing activity within different profiles on your computer. This allows for some helpful features, like logging in to different accounts on the same website simultaneously. If used properly, it can also protect the user’s privacy.

    Firefox的容器类似于配置文件,可让您在计算机上的不同配置文件中分隔浏览活动。 这提供了一些有用的功能,例如同时登录同一网站上的不同帐户。 如果使用得当,它还可以保护用户的隐私。

    Before the advent of containers, opening different sessions (think usernames/passwords) of the same domain could only be achieved opening different browsers.

    在容器出现之前,只能通过打开不同的浏览器来实现打开同一域的不同会话(认为用户名/密码)。

    Using containers, you can open in separate containers different sessions in the same browser. Each session does not know about the other ones.

    使用容器,可以在同一浏览器中的不同会话中的单独容器中打开。 每个会话都不了解其他会话。

    That is, I can be logged in with different users in the same domain in the same browser! This is pretty handy.

    也就是说,我可以在同一浏览器中以同一域中的不同用户身份登录! 这很方便。

    As another example, for a developer workflow, this means you can be logged in and website as different users in the same browser at the same time.

    再举一个例子,对于开发人员工作流程,这意味着您可以同时在同一浏览器中以不同用户的身份登录网站。

    快来多帐户容器 (Come Multi-account containers)

    In the comments’ back-n-forth, @citizen428 mentioned a very useful add-on: Multi-Account Containers!

    在评论的后面, @ citizen428提到了一个非常有用的附加组件: Multi-Account Containers

    This add-on automatically opens domains you choose in separate containers.

    此加载项自动在单独的容器中打开您选择的域。

    So, for example, you can automatically always open all of *.google.com’s universe in a separate container. Google’s cookies, sessions, etc, will be kept separate from any other domain you open (as if you were using a separate browser).

    因此,例如,您可以始终自动在单独的容器中打开* .google.com的所有Universe。 Google的Cookie,会话等将与您打开的任何其他域(例如,使用单独的浏览器)保持独立。

    最后成分:每个领域的一次性,临时容器 (Last ingredient: disposable, temporary containers for every domain)

    All other domains that you don’t configure to always open in a particular container will open in the same container as the parent tab.

    您未配置为始终在特定容器中打开的所有其他域将在与父选项卡相同的容器中打开。

    However, there is a nifty add-on that I’m testing. It is called Temporary Containers.

    但是,我正在测试一个漂亮的附加组件。 它称为临时容器

    This one is not yet “recommended by Mozilla”, but it is very promising and Mozilla should definitely have a closer look at it. And if you’re still reading, probably you should too.

    尚未“被Mozilla推荐”,但它非常有前途,Mozilla绝对应该对其进行仔细研究。 如果您仍在阅读,也许您也应该阅读。

    With Temporary Containers, all tabs that are not configured to open in a specified container (yes, it is compatible with Multi-Account Containers!) will open in a temporary container. From their wiki:

    使用临时容器,所有未配置为在指定容器中打开的选项卡(是的,它与多帐户容器兼容!)将在临时容器中打开。 从他们的维基

    Automatically reopen Tabs in new Temporary Containers when

    在新的临时容器中自动重新打开标签页

    - Opening a new Tab

    -打开一个新标签页

    - A Tab tries to load a Link in the Default Container

    -标签试图将链接加载到默认容器中

    - An external Program opens a Link in the Browser

    -外部程序在浏览器中打开链接

    In combination with Multi-Account Containers

    与多帐户容器结合使用

    - Reopens Confirm Page if in Default Container so you can choose between Temporary Container and Permanent Container

    -如果在默认容器中,则重新打开“确认页面”,以便您可以在“临时容器”和“永久容器”之间进行选择

    To achieve this, all you have to do is to configure the add-on to open new domains in temporary containers.

    为此,您所要做的就是将加载项配置为在临时容器中打开新域。

    Image for post
    Option to open different domaing in a new temporary container.
    选择在新的临时容器中打开其他域。

    无开销:临时容器会自动删除 (No overhead: temporary containers are automatically deleted)

    Image for post
    Temporary containers are automatically deleted.
    临时容器将自动删除。

    Concerned about the overhead that too many containers may have? Worry not!

    是否担心太多容器可能产生的开销? 不用担心!

    There is a reason why the extension is called “temporary” containers. These temporary containers are deleted by default 15m after the last tab in the temporary container is closed. But the timeout can be manually changed.

    将扩展名称为“临时”容器是有原因的。 在关闭临时容器中的最后一个标签后,默认情况下,这些临时容器会删除15m。 但是超时可以手动更改。

    结论 (Conclusion)

    These 3 Firefox add-ons have really improved my workflow while browsing.

    这3个Firefox插件确实改善了我浏览时的工作流程。

    1. Open a sea of tabs opened vertically in a tree-style fashion, instead of being in an upper, basically unreadable row as mostly every browser’s default: Tree Style Tabs

      打开的,而不是上,基本上无法读取行中被作为主要每一个浏览器的默认树风格时尚垂直打开的选项卡的海洋,: 树样式的选项卡

    2. Open particular domains in separate containers: Multi-Account Containers

      在单独的容器中打开特定域: 多帐户容器

    3. Open all other domains in temporary, disposable, containers: Temporary Containers

      在临时的一次性容器中打开所有其他域: 临时容器

    I’m open and interested in hearing your opinion about this. How is your workflow different? Do you have recommendations?

    我很开放,很想听听您对此的看法。 您的工作流程有何不同? 你有建议吗?

    翻译自: https://medium.com/swlh/to-avoid-being-tracked-browse-in-multiverses-a96f0d613c5a

    多元逻辑回归与多元回归区别

    展开全文
  • 多元逻辑回归公式推导

    千次阅读 2019-01-17 13:16:03
    《统计学习方法》中关于多元逻辑回归公式推导,写的比较简单,正好前几天有同事对此比较疑惑,因此,在此进行详细推导,有助于大家共同学习。 首先,关于逻辑回归中二分类问题: P(Y=1∣x)=exp(ω⋅x+b)1+exp(ω⋅x+b...
  • Python机器学习的练习系列共有八个部分:在Python机器学习的练习第3部分中,我们实现了简单的和正则化的逻辑回归。但我们的解决方法有一个限制—它只适用于二进制分类。在本文中,我们将在之前的练习中扩展我们的...
  • 稀疏多元逻辑回归(SMLR)是高光谱监督分类中的重要方法,然而仅仅利用光谱信息的SMLR忽略了影像本身的空间特征,在少量监督样本下的分类精度和算法的鲁棒性仍明显不足;虽然通过引入核技巧,核稀疏多元逻辑回归(KSMLR...
  • 5.4多元逻辑回归实战 5.4.1多元逻辑回归实战之预测病马的死亡率 本次实战内容,将使用Logistic回归来预测患疝气病的马的存活问题。原始数据集下载地址: http://archive.ics.uci.edu/ml/datasets/Horse+Colic ...
  • 利用TensorFlow实现多元逻辑回归,代码如下: import tensorflow as tf import numpy as np from sklearn.linear_model import LogisticRegression from sklearn import preprocessing # Read x and y x_...
  • 实现多元逻辑回归

    2020-12-17 10:35:36
    逻辑回归:线性分类器,二分类 决策边界 通过前面的学习,我们知道逻辑回归是一个线性分类器,能够把线性可分的数据集分成两类,二维空间的数据都在一个平面上,可以被一条直线分成两类,这条直线就是决策边界。 在...
  • 文章目录一、 Softmax函数与多元逻辑回归二、广告时间 一、 Softmax函数与多元逻辑回归 为了之后更深入地讨论神经网络,本节将介绍在这个领域里很重要的softmax函数,它常被用来定义神经网络的损失函数(针对分类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 714
精华内容 285
关键字:

多元逻辑回归