逻辑回归(使用多项式特征)
一、基础
- 逻辑回归中的决策边界,本质上相当于在特征平面中找一条直线,用这条直线分割所有的样本对应的分类;
- 逻辑回归只可以解决二分类问题(包含线性和非线性问题),因此其决策边界只可以将特征平面分为两部分;
- 问题:使用直线分类太过简单,因为有很多情况样本的分类的决策边界并不是一条直线,如下图;因为这些样本点的分布是非线性的;
- 方案:引入多项式项,改变特征,进而更改样本的分布状态;
二、具体实现
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[y0,0], X[y0,1])
plt.scatter(X[y1,0], X[y1,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 </span>=<span style="color: rgba(0, 0, 0, 1)"> np.meshgrid(np.linspace(axis[0], axis[</span>1], int((axis[1]-axis[0])*100)).reshape(-1,1<span style="color: rgba(0, 0, 0, 1)">),np.linspace(axis[</span>2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1<span style="color: rgba(0, 0, 0, 1)">)
)
X_new </span>=<span style="color: rgba(0, 0, 0, 1)"> np.c_[x0.ravel(), x1.ravel()]y_predict </span>=<span style="color: rgba(0, 0, 0, 1)"> model.predict(X_new)
zz </span>=<span style="color: rgba(0, 0, 0, 1)"> y_predict.reshape(x0.shape)</span><span style="color: rgba(0, 0, 255, 1)">from</span> matplotlib.colors <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> ListedColormap
custom_cmap </span>= ListedColormap([<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#EF9A9A</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#FFF59D</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#90CAF9</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])plt.contourf(x0, x1, zz, linewidth</span>=5, cmap=<span style="color: rgba(0, 0, 0, 1)">custom_cmap)
plot_decision_boundary(log_reg, axis=[-4, 4, -4, 4])
plt.scatter(X[y0,0], X[y0,1])
plt.scatter(X[y1,0], X[y1,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[y0,0], X[y0,1])
plt.scatter(X[y1,0], X[y1,1])
plt.show()三、其它
1)管道(Pipeline)
- Pipeline(list):list 内的每一个元素为为管道的一步,每一步是一个元组,
- 元组的第一个元素是一个字符串,是一个实例对象,描述这一步的内容或功能,第二个元素是一个类的对象;
- 管道第一步:给样本特征添加多形式项;
- 管道第二步:数据归一化处理;
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 建议使用逻辑回归算法时都进行模型正则化;
- 使用管道(Pipeline)对特征添加多项式项
逻辑回归(使用多项式特征)相关推荐
- 【李宏毅2020 ML/DL】P11 Logistic Regression | 由逻辑回归中的特征转换巧妙引出“神经网络”的概念
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...
- 逻辑回归实例,特征预处理
给定训练集spam_train.csv,要求根据每个ID各种属性值来判断该ID对应角色是Winner还是Losser(收入是否大于50K),这是一个典型的二分类问题. 训练集介绍: (1).CSV文件 ...
- 连续特征如何离散化,为什么要离散化,常用于逻辑回归模型
转自:连续特征离散化达到更好的效果,特征选择的工程方法 连续特征的离散化:在什么情况下将连续的特征离散化之后可以获得更好的效果? Q:CTR预估,发现CTR预估一般都是用LR,而且特征都是离散的.为什 ...
- sklearn的逻辑回归
官方逻辑回归链接 sklearn.linear_model.LogisticRegression - scikit-learn 1.0.2 documentationhttps://scikit-le ...
- 逻辑回归(LR)个人学习总结篇
正文共5103张图,34张图,预计阅读时间20分钟. 写作计划 线性模型LR(没有考虑特征间的关联)-->LR +多项式模型(特征组合,不适用于特征稀疏场景,泛化能力弱)-->FM(适用于 ...
- 分类任务如何用逻辑回归实现_【机器学习面试总结】—— LR(逻辑回归)
逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了. 1. 模型介绍 Logistic Re ...
- 机器学习笔记(七)——逻辑回归算法
逻辑回归(Logistic Regression,LR).在Kaggle竞赛的统计中,LR算法以63.5%的出产率,荣获各领域中"出场率最高的算法"这一殊荣.在实际场景中,逻辑回归 ...
- kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归...
使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...
- 【机器学习】逻辑回归优化技巧总结(全)
逻辑回归由于其简单高效.易于解释,是工业应用最为广泛的模型之一,比如用于金融风控领域的评分卡.互联网的推荐系统.上文总结了逻辑回归的原理及其实现[全面解析并实现逻辑回归(Python)]. 本文从实际 ...
- 5-1 逻辑回归代码(含warning解释)
#-*- coding: utf-8 -*- #逻辑回归 自动建模 import pandas as pd #参数初始化 filename = '../data/bankloan.xls' data ...
最新文章
- java opengl_java基于OpenGL ES实现渲染实例
- 什么时候出python4_Python4要来了?快来看看Python之父怎么说
- 定时器表达式各组成部分详解
- mfc创建一个word操作工程 【转自:http://blog.csdn.net/tg2003/article/details/4399981】
- Spark _13_二次排序问题
- c语言利用遍历求树高的程序,用C语言实现二叉树的遍历极其应用
- Minecraft Forge:如何下载,安装和使用Forge
- 【转】Java学习---内存溢出的排查经历
- python 学习过程总结
- double四舍五入
- MongoDB实战系列之二:MongoDB的常用操作
- DevExpress控件的GridControl控件小结
- android 代码操作.db demo,Android实现商品展示效果
- mysql 建表语句
- hello.java_helloworld怎么写java
- svn process exited with error code: 1
- 如何在微信小程序中使用iconfont 1
- 闽江师范高等专科学校计算机系成立时间,闽江师范高等专科学校2018届毕业典礼...
- CondConv: Conditionally Parameterized Convolutions for Efficient Inference论文解读
- 用pymongo对mongoDB增删改查(CRUD)
热门文章
- 华为云数据库自研黑科技,助推企业成本再降 50%
- C# Levenshtein计算字符串的相似度
- 美国银行将 AI 应用于企业应收账款处理;联合国或将利用机器学习技术帮助救灾工作...
- 【Win7 Oracle 10G rman迁移恢复到Linux 32bit oracle 10G实战】
- Visual Entity 下载列表(最新版为 2.0.0 ,已支持Visual Studio 2013)
- python卸载pip重新安装_pip无法正常使用卸载并重新安装
- 4.3.1 IP数据报格式
- FPGA管脚分配文件的保存
- 可信计算 沈昌祥_沈昌祥院士在南宁开展网络安全前沿知识讲座
- 实用技巧:Excel中的常见问题以及解决方法