逻辑回归-4.添加多项式特征

Posted shuai-long

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逻辑回归-4.添加多项式特征相关的知识,希望对你有一定的参考价值。

逻辑回归解决二分类问题,但是像下图所示的非线性数据集,是没办法用一条直线分割为两部分的。
技术图片

对于此数据集,用一个圆形或者椭圆形分割是比较合理的,圆形的表达式:\\(X_1^2 + X_2^2 - R^2 = 0\\)
为了让逻辑回归学习到这样的决策边界,我们需要引入多项式项,\\(X_1^2,X_2^2\\)分别是\\(X_1,X_2\\)的二次多项式。使用多项式后,可以定义任意圆心位置的圆、椭圆或不规则形状的决策边界。

代码实现

构造数据集

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]**2 < 1.5,dtype='int')

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()

技术图片

逻辑回归算法测试

from mylib.LogisticRegression import LogisticRegression

log = LogisticRegression()
log.fit(X,y)

算法正确率只有60%
技术图片

画出决策边界:
技术图片

可以看出,用线性分类来拟合此数据集是错误的

添加多项式,并使用管道

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler

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

poly_log_reg = PolynomialLogisticRegression(2)
poly_log_reg.fit(X,y)

注意:管道中的逻辑回归是自己实现的,但是能准确的传递到管道中,这是因为我们是仿照scikit-learn的标准实现的
技术图片
添加多项式后,算法的准确率提高到了95%

决策边界:
技术图片

当多项式项为20时
技术图片

随着项数的增加,算法变得复杂,趋于过拟合,但为了得到复杂形状的决策边界,又不能过多的减小多项式项,此时,应该考虑模型的正则化,见下章。

以上是关于逻辑回归-4.添加多项式特征的主要内容,如果未能解决你的问题,请参考以下文章

机器学习基础---神经网络(属于逻辑回归)(构建假设函数)

sklearn逻辑回归实战

机器学习之五:神经网络反向传播算法

当我们添加多项式特征时,损失函数是不是变得非凸?

R语言回归分析(regression)常见算法:简单线性回归多项式回归多元线性回归多水平回归多输出回归逻辑回归泊松回归cox比例风险回归时间序列分析非线性回归非参数回归稳健回归等

R语言回归分析(regression)常见算法:简单线性回归多项式回归多元线性回归多水平回归多输出回归逻辑回归泊松回归cox比例风险回归时间序列分析非线性回归非参数回归稳健回归等