orange实现逻辑回归_逻辑回归模型
引入:广义线性模型
上节讲到了一个简单的线性回归模型:
在实际的模型中,我们可以假设线性模型的预测值逼近
而非Y,即:
若
为单调可微函数,则:
上式即被称为广义线性模型
简介
逻辑回归模型可以看做是一种广义线性模型。考虑到二分类任务,其输出标记为0和1两个离散值,而线性回归模型产生的值为连续值,所以在做二分类任务时,我们需要找到一个函数将时值转换为0和1。最理想的函数是“单位阶跃函数”:
但单位阶跃函数不是可微函数,不能用于广义线性回归模型,故需找到一个“替代函数”,令其接近于“单位阶跃函数”,并单调可微。这个函数即是“逻辑函数”:
其函数图像为:
则可设y=1的概率为p,p满足如下广义线性模型:
其中:
当p>0.5时,y=1,否则y=0。
常用的运算类别为1的概率:
类别为0的概率:
类别为1的概率与类别为0的概率的比值:
示例—预测Titanic乘客是否能在事故中生还
读入并查看数据
import numpy as np
import pandas as pd
from sklearn import preprocessing
import matplotlib.pyplot as plt
plt.rc("font", size=14)
import seaborn as sns
sns.set(style="white") #设置seaborn画图的背景为白色
sns.set(style="whitegrid", color_codes=True)
# 将数据读入 DataFrame
df = pd.read_csv("./titanic_data.csv")
# 预览数据
print(df.shape)
df.head()
# 查看数据集中各个特征缺失的情况
df.isnull().sum()
输出结果为:
处理缺失数据
从以上的结果可以看出,年龄(age)和仓位(cabin)缺失较多。其中,年龄缺失 20.15%,仓位缺失77.48%。在这里我们选择对年龄进行填充处理,舍弃仓位数据,是否生还(Survived)为此次预测的目标,故舍弃无Survived数据的值。
处理年龄
先看一下年龄的分布情况。
ax = df["age"].hist(bins=15, color='teal', alpha=0.6)
ax.set(xlabel='age')
plt.xlim(-10,85)
plt.show()
print('The mean of "Age" is %.2f' %(df["age"].mean(skipna=True)))
# 年龄的中间值
print('The median of "Age" is %.2f' %(df["age"].median(skipna=True)))
从图中可以看出,“年龄”的偏度不为0, 故,使用均值替代缺失值不是最佳选择, 这里可以选择使用中间值替代缺失值。
登船地点
看一下登船地点的分布情况:
print('按照登船地点分组 (C = Cherbourg, Q = Queenstown, S = Southampton):')
print(df['embarked'].value_counts())
sns.countplot(x='embarked', data=df, palette='Set2')
plt.show()
由上图可以看出,登船地点为离散值,最多的为S,故将空值填为S。
处理如果一条数据的 "Age" 缺失, 使用年龄的中位数 28 替代.
如果一条数据的 "Embarked" 缺失, 使用登船地点的众数 “S” 替代.
由于太多乘客的 “Cabin” 数据缺失, 从所有数据中丢弃这个特征的值.
如果“Surviced”缺失,则舍弃。
data = df.copy()
data["age"].fillna(df["age"].median(skipna=True), inplace=True)
data["embarked"].fillna(df['embarked'].value_counts().idxmax(), inplace=True)
data.drop('cabin', axis=1, inplace=True)
data=data[data["survived"]>=0]
data.isnull().sum()
可以看出,只有1个fare的缺失,查看fare的情况:
ax = data["fare"].hist(bins=15, color='teal', alpha=0.6)
ax.set(xlabel='fare')
plt.xlim(0,520)
plt.show()
# fare的均值
print('The mean of "fare" is %.2f' %(data["fare"].mean(skipna=True)))
# fare的中间值
print('The median of "fare" is %.2f' %(data["fare"].median(skipna=True)))
故,fare用中间值14.45填充。
data["fare"].fillna(df["fare"].median(skipna=True), inplace=True)
处理过后的数据如下:
查看处理前后的年龄分布情况:
plt.figure(figsize=(15,8))
ax = df["age"].hist(bins=15, normed=True, stacked=True, color='teal', alpha=0.6)
df["age"].plot(kind='density', color='teal')
ax = data["age"].hist(bins=15, normed=True, stacked=True, color='orange', alpha=0.5)
data["age"].plot(kind='density', color='orange')
ax.legend(['Raw Age', 'Adjusted Age'])
ax.set(xlabel='Age')
plt.xlim(-10,85)
plt.show()
处理其他数据
预防多重共线性
数据中的两个特征 “sibsp” (一同登船的兄弟姐妹或者配偶数量)与“parch”(一同登船的父母或子女数量)都是代表是否有同伴同行. 为了预防这两个特征具有多重共线性, 我们可以将这两个变量转为一个变量 “TravelAlone” (是否独自一人成行)。
## 创建一个新的变量'TravelAlone'记录是否独自成行
data['TravelAlone']=np.where((data["sibsp"]+data["parch"])>0, 0, 1)
data.drop('sibsp', axis=1, inplace=True)
data.drop('parch', axis=1, inplace=True)
类别处理
对 “Embarked”,"Sex",可以将类别转换为数字。而“ticket”与“fare”重复,“name”每个人都不同,故 丢弃 'name', 'ticket'。
# 对 Embarked","Sex"进行独热编码, 丢弃 'name', 'ticket'
final =pd.get_dummies(data, columns=["embarked","sex"])
final.drop('name', axis=1, inplace=True)
final.drop('ticket', axis=1, inplace=True)
final.head()
直观分析
年龄分析
plt.figure(figsize=(15,8))
ax = sns.kdeplot(final["age"][final.survived == 1], color="darkturquoise", shade=True)
sns.kdeplot(final["age"][final.survived == 0], color="lightcoral", shade=True)
plt.legend(['Survived', 'Died'])
plt.title('Density Plot of Age for Surviving Population and Deceased Population')
ax.set(xlabel='Age')
plt.xlim(-10,85)
plt.show()
可以看出,生还与遇难群体的分布相似, 唯一大的区别是生还群体中用一部分低年龄的乘客. 说明当时的人预先保留了孩子的生还机会。
票价
plt.figure(figsize=(15,8))
ax = sns.kdeplot(final["fare"][final.survived == 1], color="darkturquoise", shade=True)
sns.kdeplot(final["fare"][final.survived == 0], color="lightcoral", shade=True)
plt.legend(['Survived', 'Died'])
plt.title('Density Plot of Fare for Surviving Population and Deceased Population')
ax.set(xlabel='Fare')
plt.xlim(-20,200)
plt.show()
生还与遇难群体的票价分布差异比较大, 说明这个特征对预测乘客是否生还非常重要. 票价和仓位相关, 也许是仓位影响了逃生的效果, 我们接下来看仓位的分析.
仓位
sns.barplot('pclass', 'survived', data=df, color="darkturquoise")
plt.show()
如我们所料, 一等舱的乘客生还几率最高.
登船地点
sns.barplot('embarked', 'survived', data=df, color="teal")
plt.show()
可以看出,从法国 Cherbourge 登录的乘客生还率最高。
是否独自成行
sns.barplot('TravelAlone', 'survived', data=final, color="mediumturquoise")
plt.show()
可以看出,独自成行的乘客生还率比较低. 当时的年代, 大多数独自成行的乘客为男性居多.
性别
sns.barplot('sex', 'survived', data=df, color="aquamarine")
plt.show()
很明显, 女性的生还率比较高。
使用Logistic Regression做预测
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 使用如下特征做预测
cols = ["age","fare","TravelAlone","pclass","embarked_C","embarked_S","sex_male"]
# 创建 X (特征) 和 y (类别标签)
X = final[cols]
y = final['survived']
# 将 X 和 y 分为两个部分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2)
# 检测 logistic regression 模型的性能
# TODO 添加代码:
# 1.训练模型,
# 2.根据模型, 以 X_test 为输入, 生成变量 y_pred
lr_model=LogisticRegression()
lr_model.fit(X_train, y_train)
y_pred=lr_model.predict(X_test)
print('Train/Test split results:')
print("准确率为 %2.3f" % accuracy_score(y_test, y_pred))
结果为:
Train/Test split results:
准确率为 0.836
准确率还可以接受。
orange实现逻辑回归_逻辑回归模型相关推荐
- 逻辑斯蒂回归 逻辑回归_逻辑回归简介
逻辑斯蒂回归 逻辑回归 Logistic regression is a classification algorithm, which is pretty popular in some commu ...
- 逻辑斯蒂回归_逻辑回归 - 3 逻辑回归模型
1 逻辑斯蒂回归模型 二项逻辑斯蒂回归模型是一种分类模型,由条件概率分布 表示,形式为参数化的逻辑斯蒂分布,这里随机变量 取值为实数,随机变量 取值为1或-1. 对于给定的输入实例 ,按照上面式可以求 ...
- orange实现逻辑回归_逻辑回归算法的原理及实现(LR)
Logistic回归虽然名字叫"回归",但却是一种分类学习方法.使用场景大概有两个:第一用来预测,第二寻找因变量的影响因素.逻辑回归(Logistic Regression, LR ...
- spark java 逻辑回归_逻辑回归分类技术分享,使用Java和Spark区分垃圾邮件
原标题:逻辑回归分类技术分享,使用Java和Spark区分垃圾邮件 由于最近的工作原因,小鸟很久没给大家分享技术了.今天小鸟就给大家介绍一种比较火的机器学习算法,逻辑回归分类算法. 回归是一种监督式学 ...
- 逻辑斯蒂回归_逻辑斯蒂回归详细解析 | 统计学习方法学习笔记 | 数据分析 | 机器学习...
本文包括: 重要概念 逻辑斯蒂回归和线性回归 二项逻辑斯谛回归模型 逻辑斯蒂回顾与几率 模型参数估计 多项逻辑斯谛回归 其它有关数据分析,机器学习的文章及社群 1.重要概念: 在正式介绍逻辑斯蒂回归模 ...
- python逻辑回归_逻辑回归:使用Python的简化方法
逻辑回归的目标是什么? 在逻辑回归中,我们希望根据一个或多个自变量(X)对因变量(Y)进行建模.这是一种分类方法.此算法用于分类的因变量.Y使用一个函数建模,该函数为X的所有值提供0到1之间的输出.在 ...
- python如何做混合模型面板回归_面板Tobit模型探究(二):模型讲解以及stata实现...
第一部分 模型发展历史 Tobit模型从最初的结构式模型扩展到时间序列模型.面板数据模型以及非参数模型等形式,无论Tobit模型的结构形式如何变化,现有的估计方法基本上都是在Heckman(197 ...
- 优化 回归_使用回归优化产品价格
优化 回归 应用数据科学 (Applied data science) Price and quantity are two fundamental measures that determine t ...
- python支持向量机回归_支持向量机回归的Scikitlearn网格搜索
我正在学习交叉验证网格搜索,并遇到了这个youtube playlist,教程也作为ipython笔记本上传到了github.我试图在同时搜索多个参数部分重新创建代码,但我使用的不是knn,而是支持向 ...
最新文章
- 我们单位里新来的应届毕业生(转贴)
- 人生,能有多少个十年?| PMCAFF 十年故事
- 计算机二级2021辅导书,2021该如何准备计算机二级考试?
- 51nod 2020 排序相减(暴力解法)
- java方法和 IDEA Debug调试
- 【模板】最大密度子图
- Xception总结
- 线程安全的三大不安全案例以及解决方法
- 【Qt串口调试助手】1.1 - Qt5编写串口调试助手,Qt串口编程
- 前牙正常覆盖是多少_深覆合千万不要矫正?用图示告诉你深覆合深覆盖的区别是什么,有什么危害...
- MYSQL数据库升级
- SQL超级简单的基础入门
- 一、SIM800C简介
- 概率论中经典概率模型
- SAVIOR Securing Autonomous Vehicles with Robust Physical Invariants 论文报告
- 《生物化学与分子生物学》----蛋白质----听课笔记(四)
- 【电驱动】驱动电机系统讲解
- Scrapy爬虫流程
- 开源的api文档管理系统
- pycharm-03-工程结构
热门文章
- 腾讯广告算法大赛 | 第三周周冠军心得分享
- 基于文本和语音的双模态情感分析
- 如何将先验知识注入推荐模型
- 超越SimCSE两个多点,Prompt+对比学习的文本表示新SOTA
- 跨境电子商务独立站如何找到热门的利基市场
- java等待页面加载_java selenium (十三) 智能等待页面加载完成
- 深度学习与神经网络——邱锡鹏
- 如何设置centos7的ip地址配置信息,让我的主机和它互Ping,以及远程登陆
- Leetcode每日一题:452.minimum-number-of-arrows-to-burst-balloons(最少数量的箭引爆气球)
- 数字信号处理2:傅里叶变换