逻辑回归-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时

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

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

时间: 2024-11-09 00:40:09

逻辑回归-4.添加多项式特征的相关文章

机器学习:逻辑回归(使用多项式特征)

一.基础 逻辑回归中的决策边界,本质上相当于在特征平面中找一条直线,用这条直线分割所有的样本对应的分类: 逻辑回归只可以解决二分类问题(包含线性和非线性问题),因此其决策边界只可以将特征平面分为两部分: 问题:使用直线分类太过简单,因为有很多情况样本的分类的决策边界并不是一条直线,如下图:因为这些样本点的分布是非线性的: 方案:引入多项式项,改变特征,进而更改样本的分布状态: 二.具体实现 1)模拟数据集 import numpy as np import matplotlib.pyplot a

机器学习之逻辑回归(Logistic Regression)

"""逻辑回归中的Sigmoid函数"""   import numpy as np   import matplotlib.pyplot as plt     def sigmoid(t):   return 1/(1+np.exp(-t))     x=np.linspace(-10,10,500)   y=sigmoid(x)     plt.plot(x,y)   plt.show() 结果: 逻辑回归损失函数的梯度:   逻辑回归算法:

sklearn逻辑回归实战

目录 题目要求 ex2data1.txt处理 方案一:无多项式特征 方案二:引入多项式特征 ex2data2.txt处理 两份数据 ex2data1.txt ex2data2.txt 题目要求 根据学生两门课的成绩和是否入学的数据,预测学生能否顺利入学:利用ex2data1.txt和ex2data2.txt中的数据,进行逻辑回归和预测. 数据放在最后边. ex2data1.txt处理 作散点图可知,决策大致符合线性关系,但还是有弯曲(非线性),用线性效果并不好,因此可用两种方案:方案一,无多项式

【转】逻辑回归常见面试点总结

转自:https://www.cnblogs.com/ModifyRong/p/7739955.html 1.简介 逻辑回归是面试当中非常喜欢问到的一个机器学习算法,因为表面上看逻辑回归形式上很简单,很好掌握,但是一问起来就容易懵逼.所以在面试的时候给大家的第一个建议不要说自己精通逻辑回归,非常容易被问倒,从而减分.下面总结了一些平常我在作为面试官面试别人和被别人面试的时候,经常遇到的一些问题. 2.正式介绍 如何凸显你是一个对逻辑回归已经非常了解的人呢.那就是用一句话概括它!逻辑回归假设数据服

逻辑回归 面试

转自 http://www.cnblogs.com/ModifyRong/p/7739955.html 1.简介 逻辑回归是面试当中非常喜欢问到的一个机器学习算法,因为表面上看逻辑回归形式上很简单,很好掌握,但是一问起来就容易懵逼.所以在面试的时候给大家的第一个建议不要说自己精通逻辑回归,非常容易被问倒,从而减分.下面总结了一些平常我在作为面试官面试别人和被别人面试的时候,经常遇到的一些问题. 2.正式介绍 如何凸显你是一个对逻辑回归已经非常了解的人呢.那就是用一句话概括它!逻辑回归假设数据服从

「数据挖掘入门系列」挖掘建模之分类与预测&ndash;逻辑回归

拿电商行业举例,经常会遇到以下问题: 如果基于商品的历史销售情况,以及节假日.气候.竞争对手等影响因素,对商品的销量进行趋势预测? 如何预测未来一段时间哪些客户会流失,哪些客户可能会成为VIP用户? 如果预测一种新商品的销售量,以及哪种类型的客户会比较喜欢? 除此之外,运营部门需要通过数据分析来了解具有某些特征的客户的消费习惯,管理人员希望了解下一个月的销售收入等,这些都是分类与预测的日志. 分类和预测是预测问题的两种主要类型. 分类主要是预测分类标号(离散值) 预测主要是建立连续值函数模型 挖

Spark 多项式逻辑回归__多分类

package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.{BinaryLogisticRegressionSummary, LogisticRegression, LogisticRegressionModel} import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator i

Spark 多项式逻辑回归__二分类

package Spark_MLlib import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.{LogisticRegression, LogisticRegressionModel} import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator import org.apache.spark.ml.feature

逻辑回归--参数解释+数据特征不独热编码+训练数据分布可视话

#-*- coding: utf-8 -*- ''' 逻辑回归参数: penalty:惩罚项,str类型,可选参数为l1和l2,默认为l2.用于指定惩罚项中使用的规范.newton-cg.sag和lbfgs求解算法只支持L2规范.L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布,所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit),但是如果要说是不是加了约束就会好,这个没有人能回答,只能说,加约束的情况下,理论上应该可以获得泛化能力更强的结果. du