《数据科学基础》第三次实践作业-逻辑回归

这篇博客探讨了逻辑回归的基础,包括残差计算、极大似然估计、相关性、评价指标以及集成学习的概念。通过实例计算了一个线性回归模型的SSE,并解释了如何使用极大似然估计来优化模型参数。此外,还提到了在数据科学实践中如何应用逻辑回归,如在鸢尾花数据集和自行车租赁数据集上的应用,并强调了逻辑回归在分类问题中的作用。
摘要由CSDN通过智能技术生成

逻辑回归

残差

下面这张图是一个简单的线性回归模型,图中标注了每个样本点预测值与真实值的残差。计算 SSE 为多少

把每个点的残差平方加起来就可以得到 SSE(Sum of Squared Errors,误差平方和)。

根据图中的标注,每个样本点的真实值和预测值分别是:

$(2, 2.8)$,$(3, 3.5)$,$(5, 5.2)$,$(7, 7.1)$

它们的残差分别是:

$0.2$,$0$,$0$,$-0.1$

将每个残差平方加起来得到 SSE:

$SSE = 0.2^2 + 0^2 + 0^2 + (-0.1)^2 = 0.05$

因此,这个线性回归模型的 SSE 是 0.05。

在线性回归模型中,残差是指每个样本点的真实值与模型预测值之间的差异。可以通过以下公式计算残差:

残差 = 真实值 - 预测值

下列哪一种偏移(offsets),是我们在最小二乘直线拟合的情况下使用的?图中横坐标是输入 X,纵坐标是输出 Y。

A. 垂直偏移(vertical offsets)

B. 垂向偏移(perpendicular offsets)

C. 两种偏移都可以

D. 以上说法都不对

A. 垂直偏移(vertical offsets)
在最小二乘直线拟合中,我们希望找到一条直线,使得所有样本点到该直线的 垂直距离之和最小。这里的垂直距离指的就是每个样本点的真实值与预测值之间的差异,也就是 残差。因此,最小二乘直线拟合使用的是垂直偏移。

相关系数

两个特征之间的相关系数如果等于0,则说明二者之间没有线性相关性。相关系数是用于衡量两个变量之间线性相关程度的指标,其 取值范围在-1到1之间。当相关系数为0时,表示两个变量之间没有线性相关性,即它们的变化是相互独立的。当相关系数为正值时,表示两个变量之间呈正相关关系,即它们的变化方向相同;当相关系数为负值时,表示两个变量之间呈负相关关系,即它们的变化方向相反。相关系数的绝对值越大,表示两个变量之间的线性相关程度越高。

极大似然估计

A 极大似然估计。逻辑回归模型的学习过程就是求解模型参数的过程,一般使用极大似然估计方法来估计模型参数。该方法的目标是使得给定数据集中观测到的样本的似然函数最大化,从而得到最优的模型参数。

在回归分析中,自变量为 连续型变量,因变量为连续型变量。答案是D。回归分析是一种用于建立自变量和因变量之间关系的方法,自变量和因变量都可以是连续型变量或离散型变量,但在常见的情况下,自变量和因变量都是连续型变量。例如,线性回归、多元线性回归、逻辑回归等常见的回归分析方法都是基于连续型自变量和因变量的。准化偏回归系数

在有统计学意义的前提下,标准化偏回归系数的绝对值越大,说明相应的自变量对y的作用越大。答案是B。标准化偏回归系数表示自变量单位标准差变化时,因变量的变化量,绝对值越大表示自变量对因变量的影响越大。

评价指标

下列哪个评价指标不适用于回归模型,答案是 F1值。F1值是分类模型的评价指标,用于衡量模型的准确率和召回率的平衡性。

RMSE、MSE和R方都是回归模型的评价指标。RMSE(均方根误差)和MSE(均方误差)用于衡量模型预测结果与真实值之间的误差大小(残差),R方用于衡量模型对因变量变化的解释程度。

集成学习

集成学习(Ensemble Learning) - 知乎

集成学习是指 使用多种兼容的学习算法/模型来执行单个任务的技术,目的是为了得到更佳的预测表现。 集成学习的主要方法可归类为三大类: 堆叠(Stacking)、提升(Boosting) 和装袋(Bootstrap aggregating)。 Bootstrap aggregating 简称为Bagging。

数据科学家可能会同时使用多个算法(模型)进行预测,并且最后把这些算法的结果集成起来进行最后的预测(集成学习),以下对集成学习说法正确的是B单个模型之间有低相关性。集成学习是一种将多个模型组合起来以达到更好预测结果的方法,其基本思想是将多个弱学习器(模型)组合成一个强学习器。在集成学习中,单个模型之间应该具有低相关性,这样才能使得集成模型的效果更好。在集成学习中,通常使用投票或平均权重的方法进行结果的集成,具体方法要根据实际情况而定。同时,单个模型可以使用不同的算法。

最大最小规范化

假设属性income的最小最大值分别是12000元和98000元。利用最大最小规范化的方法将属性的值映射到0至1的范围内。对属性income的73600元将被转化为0.6。答案是A 0.821。最大最小规范化是一种常见的数据规范化方法,可以将属性的值映射到0至1的范围内。对于income属性的值为73600元,其规范化后的值为: (73600-12000)/(98000-12000)=0.7163

假设属性income的最小最大值分别是12000元和98000元。利用最大最小规范化的方法将属性的值映射到0至1的范围内。对属性income的73600元将被转化为

A 0.821

B 1.224

C 1.458

D 0.716

列题

假如使用逻辑回归对样本进行分类,得到训练样本的准确率和测试样本的准确率。现在,在数据中增加一个新的特征,其它特征保持不变,重新训练测试。

下列说法正确的是?

A. 训练样本准确率一定会降低

B. 训练样本准确率一定增加或保持不变

C. 测试样本准确率一定会降低

D. 测试样本准确率一定增加或保持不变

onehot逆编码,把onehot编码的矩阵变为一维向量



1.当变量分布呈右偏时,有() A 众数<中位数<算术平均数 B 算术平均数<中位数<众数 C

线性回归和逻辑回归

iris.csv

在sk-learn中,sklearn.linear_model中的LinearRegression不能实现逻辑回归,这是错误的。LinearRegression是用于线性回归的模型,它的目标是拟合一条直线来描述自变量和因变量之间的关系。而逻辑回归则是用于分类问题的模型,它的目标是找到一个函数来将样本分为不同的类别。在sklearn中,实现逻辑回归需要使用sklearn.linear_model中的LogisticRegression模型。LogisticRegression使用逻辑函数来建立分类模型,可以用于二分类和多分类问题。因此,LinearRegression和LogisticRegression是两个不同的模型,用于解决不同类型的问题。

【问题描述】

鸢尾属下有三个亚属,分别是山鸢尾 (setosa),变色鸢尾(versicolor)和维吉尼亚鸢尾(virginica),据此可将鸢尾属花分为以上三类。iris.csv数据集包含SepalLength花萼长度、SepalWidth花萼宽度、PetalLength花瓣长度、PetalWidth花瓣宽度和Class鸢尾属花所属的亚种几列。本程序根据花萼的长度和宽度,花瓣的长度和宽度,采用逻辑回归建立分类模型,对鸢尾属花进行分类。完成以下操作:

(1)读取文件iris.csv,显示数据集的前10行,初步了解数据集的构成。

(2)以数据集的前四列作为特征变量,最后一列Class作为分类值,对数据集划分训练集和测试集,30%的数据用于测试。

可以使用 train_test_split 函数将数 据集划分为训练集和测试集。假设数据集为 data,其中前四列为特征变量,最后一列为分类值,可以按照以下方式进行划分:
from sklearn.model_selection import train_test_split

# 前四列作为特征变量,最后一列为分类值 #选取特征
X = data.iloc[:, :4]
y = data.iloc[:, -1]

# 划分训练集和测试集,测试集占比为30%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
在这个例子中,我们将 X 定义为数据集的前四列, y 定义为数据集的最后一列。然后使用 train_test_split 函数将 Xy 划分为训练集和测试集,其中测试集占比为 30%,随机种子设为 42。最后得到的 X_trainy_train 分别为训练集的特征变量和分类值, X_testy_test 分别为测试集的特征变量和分类值。

(3)用逻辑回归模型进行训练数据,模型参数采用默认值,使用predict()函数得到之前训练的鸢尾属花亚种分类模型在测试集合上的预测结果,最后显示该模型分类的准确率。

iris.csv

【输入形式】

【输出形式】

【样例输入】

【样例输出】

SepalLength SepalWidth PetalLength PetalWidth Class

0 5.1 3.5 1.4 0.2 setosa

1 4.9 3.0 1.4 0.2 setosa

2 4.7 3.2 1.3 0.2 setosa

3 4.6 3.1 1.5 0.2 setosa

4 5.0 3.6 1.4 0.2 setosa

5 5.4 3.9 1.7 0.4 setosa

6 4.6 3.4 1.4 0.3 setosa

7 5.0 3.4 1.5 0.2 setosa

8 4.4 2.9 1.4 0.2 setosa

9 4.9 3.1 1.5 0.1 setosa

accuracy: 0.9333333333333333

【样例说明】

【评分标准】

# import pandas as pd
# from sklearn.model_selection import train_test_split #模型划分模块
# from sklearn.linear_model import LogisticRegression #线性回归的逻辑回归

# # 读取数据
# data = pd.read_csv("iris.csv")
# print(data.head(10)) # 输出前10行

# # 数据集划分
# X = data.iloc[:, :-1] # 前四列作为特征 (挑选自变量和因变量)
# y = data.iloc[:, -1] # 最后一列作为分类值
# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# # 模型训练
# model = LogisticRegression()
# model.fit(X_train, y_train)

# # 预测
# y_pred = model.predict(X_test)

# # 计算准确率
# accuracy = sum(y_pred == y_test) / len(y_test)
# print("accuracy: ", accuracy)

bikeshare.csv

使用一个包含10000余样本的自行车租赁数据集。该数据集反映每个特定小时内某个地区的自行车租赁情况,包括具体日期时间、属于四季的哪个季节、是否假期、是否工作日、天气、气温、体感温度、湿度、风速、注册用户租赁数量、非注册用户租赁数量等特征的情况。

要求:

(1)读入bikeshare.csv文件;

(2)初步了解数据集,显示数据集的形状和前5行的内容;

(3)以温度列为自变量,输出值为自行车租赁数量是否大于平均值;

(4)划分训练集和测试集(测试集数据占20%,设置random_state参数值为0);

(5)用逻辑回归模型进行拟合

(6)显示分类准确率的值

bikeshare.csv

【输入形式】

【输出形式】

(10886, 13)

Unnamed: 0 datetime season holiday workingday weather \

0 0 2011-01-01 00:00:00 1 0 0 1

1 1 2011-01-01 01:00:00 1 0 0 1

2 2 2011-01-01 02:00:00 1 0 0 1

3 3 2011-01-01 03:00:00 1 0 0 1

4 4 2011-01-01 04:00:00 1 0 0 1

temp atemp humidity windspeed casual registered count

0 9.84 14.395 81 0.0 3 13 16

1 9.02 13.635 80 0.0 8 32 40

2 9.02 13.635 80 0.0 5 27 32

3 9.84 14.395 75 0.0 3 10 13

4 9.84 14.395 75 0.0 0 1 1

score is: 0.6634527089072544

【样例输出】

【样例说明】

【评分标准】

【提示1】书写代码时,在程序起始处加入如下代码处理打印输出的警告信息:

import os

import sys

fd = os.open('/dev/null',os.O_WRONLY)

os.dup2(fd,2)

【提示2】读入bikeshare.csv文件之后,加上如下代码保证打印输出格式正确:

pd.set_option('display.max_columns', None)

import os
import sys
fd = os.open('/dev/null',os.O_WRONLY)
os.dup2(fd,2)
这段代码是将标准错误输出重定向到 /dev/null,这样可以屏蔽警告信息的打印。在使用Jupyter Notebook或其他交互式环境时,通常不需要执行这段代码。它更适用于在命令行或脚本中执行代码时,以避免打印大量的警告信息。如果您在交互式 环境中执行代码,可以直接忽略这段代码。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# 读入bikeshare.csv文件
df = pd.read_csv('1653398604938074346.csv')

# 初步了解数据集,显示数据集的形状和前5行的内容
print(df.shape)
print(df.head())

# 以温度列为自变量,输出值为自行车租赁数量是否大于平均值
average_count = df['count'].mean()
df['rental_greater_than_average'] = df['count'] > average_count
print(df[['temp', 'rental_greater_than_average']])

# 划分训练集和测试集
X = df[['temp']]
y = df['rental_greater_than_average']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 用逻辑回归模型进行拟合
model = LogisticRegression()
model.fit(X_train, y_train)

# 显示分类准确率的值
score = model.score(X_test, y_test)
print("score is:", score)

逻辑回归思路

导入划分数据集的模块,测试集的模块,回归模型

定义自变量和因变量(pandas索引)

(4条消息) pandas的dataframe行列索引方法与查询_dataframe索引_Rouge-Eradiction的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈都婆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值