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

一、基础

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

二、具体实现

 1)模拟数据集

  • import numpy as np
    import matplotlib.pyplot as plt
    
    np.random.seed(666)
    X = np.random.normal(0, 1, size=(200, 2))
    y = np.array(X[:,0]**2 + X[:,1]**2 < 1.5, dtype=‘int‘)
    
    plt.scatter(X[y==0,0], X[y==0,1])
    plt.scatter(X[y==1,0], X[y==1,1])
    plt.show()

 2)使用逻辑回归算法(不添加多项式项)

  • from playML.LogisticRegression import LogisticRegression
    
    log_reg = LogisticRegression()
    log_reg.fit(X, y)
    
    def plot_decision_boundary(model, axis):
    
        x0, x1 = np.meshgrid(
            np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1),
            np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1)
        )
        X_new = np.c_[x0.ravel(), x1.ravel()]
    
        y_predict = model.predict(X_new)
        zz = y_predict.reshape(x0.shape)
    
        from matplotlib.colors import ListedColormap
        custom_cmap = ListedColormap([‘#EF9A9A‘,‘#FFF59D‘,‘#90CAF9‘])
    
        plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)
    
    plot_decision_boundary(log_reg, axis=[-4, 4, -4, 4])
    plt.scatter(X[y==0,0], X[y==0,1])
    plt.scatter(X[y==1,0], X[y==1,1])
    plt.show()

  • 问题:决策边界不能反应数据集样本的分布;

 3)使用逻辑回归算法(添加多项式项)

  • 使用管道(Pipeline)对特征添加多项式项

    # 使用管道:Pipeline(list),list 内的每一个元素为为管道的一步,每一步是一个元组,
            # 元组的第一个元素是一个字符串,是一个实例对象,描述这一步的内容或功能,第二个元素是一个类的对象
    from sklearn.pipeline import Pipeline
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.preprocessing import StandardScaler
    
    def PolynomialLogisticRegression(degree):
        return Pipeline([
            # 管道第一步:给样本特征添加多形式项;
            (‘poly‘, PolynomialFeatures(degree=degree)),
            # 管道第二步:数据归一化处理;
            (‘std_scaler‘, StandardScaler()),
            (‘log_reg‘, LogisticRegression())
        ])
    
    poly_log_reg = PolynomialLogisticRegression(degree=2)
    poly_log_reg.fit(X, y)
    
    plot_decision_boundary(poly_log_reg, axis=[-4, 4, -4, 4])
    plt.scatter(X[y==0,0], X[y==0,1])
    plt.scatter(X[y==1,0], X[y==1,1])
    plt.show()

三、其它

 1)管道(Pipeline)

  • Pipeline(list):list 内的每一个元素为为管道的一步,每一步是一个元组,
  • 元组的第一个元素是一个字符串,是一个实例对象,描述这一步的内容或功能,第二个元素是一个类的对象;
  1. 管道第一步:给样本特征添加多形式项;
  2. 管道第二步:数据归一化处理;

 2)scikit-learn 库的标准

  • 管道中使用的逻辑回归算法模型:LogisticRegression() 是自己所写的算法,之所以能直接传入管道使用,因为自己所写的算法遵循了 scikit-learn 的标准;
  • scikit-learn 中每一个机器学习算法的标准:__init__()函数、fit()函数、predict()函、score()函数等;
  • 如果在scikit-learn 的模块中使用了其它算法/模块,只要这些其它的模块遵循了 scikit-learn 中算法的标准,则 scikit-learn 的模块就认为这些模块也是 scikit-learn 本身的模块;
  • 也就是说,如果其它算法想和scikit-learn中的模块衔接使用,该算法就要遵循scikit-learn中机器学习算法的标准;

 3)其它

  • 实习的应用中,需要对 degree 参数进行调整,选取最佳的参数;
  • scikit-learn 建议使用逻辑回归算法时都进行模型正则化;

原文地址:https://www.cnblogs.com/volcao/p/9385930.html

时间: 2024-10-23 14:02:00

机器学习:逻辑回归(使用多项式特征)的相关文章

机器学习---逻辑回归(二)(Machine Learning Logistic Regression II)

在<机器学习---逻辑回归(一)(Machine Learning Logistic Regression I)>一文中,我们讨论了如何用逻辑回归解决二分类问题以及逻辑回归算法的本质.现在来看一下多分类的情况. 现实中相对于二分类问题,我们更常遇到的是多分类问题.多分类问题如何求解呢?有两种方式.一种是方式是修改原有模型,另一种方式是将多分类问题拆分成一个个二分类问题解决. 先来看一下第一种方式:修改原有模型.即:把二分类逻辑回归模型变为多分类逻辑回归模型. (二分类逻辑回归称为binary

机器学习—逻辑回归理论简介

下面是转载的内容,主要是介绍逻辑回归的理论知识,先总结一下自己看完的心得 简单来说线性回归就是直接将特征值和其对应的概率进行相乘得到一个结果,逻辑回归则是这样的结果上加上一个逻辑函数 这里选用的就是Sigmoid函数,在坐标尺度很大的情况下类似于阶跃函数 在确认特征对应的权重值也就是回归系数的时候 最常用的方法是最大似然法,EM参数估计,这个是在一阶导数能够有解的前提下 如果一阶导数无法求得解析值,那么一般选取梯度上升法,通过有限次的迭代过程,结合代价函数更新回归系数至收敛 //////////

机器学习-逻辑回归与线性回归

logistic回归与线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model).这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归.logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释.所以实际中最为常用的就是二分类的logistic回

机器学习-逻辑回归

(整理的简单,公式也没使用公式编辑器.) 对于数据集D={(x1,y1),(x2,y2),...,{xn,yn}} ,而xi= {xi1,xi2,...,xim} 代表m维 . 在线性回归中,我们想学习一个线性的函数 f(x) = w1*x1+w2*x2+w3*x3+...+wm*xm+b . 向量形式 f(X) = Wt*X +b  其中Wt 是W 向量的转置.其可能值范围是(-oo,+oo). 对于二分类任务,其类别标记为y={0,1},  需要将范围取到(0,1),就使用sigmoid函数

[机器学习]--逻辑回归总结

逻辑回归是一个分类算法,它可以处理二元分类以及多元分类.虽然它名字里面有“回归”两个字,却不是一个回归算法.那为什么有“回归”这个误导性的词呢?个人认为,虽然逻辑回归是分类模型,但是它的原理里面却残留着回归模型的影子.邮件是否是垃圾邮件.细胞是否是癌细胞. 1. 从线性回归到逻辑回归 我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数θθ,满足Y=XθY=Xθ.此时我们的Y是连续的,所以是回归模型.如果我们想要Y是离散的话,怎么办呢?一个可以想到的办法是,我们对于这个

机器学习逻辑回归算法推导

1.引自https://www.cnblogs.com/bnuvincent/p/9695666.html 2. 基本原理 Logistic Regression和Linear Regression的原理是相似的,按照我自己的理解,可以简单的描述为这样的过程: (1)找一个合适的预测函数(Andrew Ng的公开课中称为hypothesis),一般表示为h函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果.这个过程时非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的

机器学习(四)—逻辑回归LR

1.关于模型在各个维度进行不均匀伸缩后,最优解与原来等价吗?  答:等不等价要看最终的误差优化函数.如果经过变化后最终的优化函数等价则等价.明白了这一点,那么很容易得到,如果对原来的特征乘除某一常数,则等价.做加减和取对数都不等价. 2. 过拟合和欠拟合如何产生,如何解决?  欠拟合:根本原因是特征维度过少,导致拟合的函数无法满足训练集,误差较大:  解决方法:增加特征维度:  过拟合:根本原因是特征维度过大,导致拟合的函数完美的经过训练集,但对新数据的预测结果差.  解决方法:(1)减少特征维

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

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

逻辑回归代码

代码 1. 逻辑回归 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression import ssl ssl._create_default_https_context =