{
"cells": [
{
"cell_type": "markdown",
"id": "498d70fa",
"metadata": {},
"source": [
"**实验三:逻辑回归**"
]
},
{
"cell_type": "markdown",
"id": "fa5c5483",
"metadata": {},
"source": [
"**第一部分:函数介绍**"
]
},
{
"cell_type": "markdown",
"id": "869f21ce",
"metadata": {},
"source": [
"由于机器学习所使用的数据集并不一定能够直接进行使用,如经常可能出现缺失值或者异常值(如异常0或者异常大的数据),又或者是数据类型不适合直接应用于模型训练等,所以数据预处理同样是机器学习过程中十分重要的一个部分。 \n",
" 本次实验的数据预处理需要用的操作包括判断数据是否有缺失值以及异常值、缺失值替换操作、并将部分特征值类型转换为适合模型训练的类型。在进行逻辑回归实验之前,首先介绍下上述操作所用到的python语法。"
]
},
{
"cell_type": "markdown",
"id": "3957a94a",
"metadata": {},
"source": [
"1) 判断一列中是否有缺失值"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "5472add3",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import math\n",
"import matplotlib as mpl\n",
"# ignore warnings\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "dc6837f2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"height 2\n",
"weight 2\n",
"sex 0\n",
"dtype: int64\n",
" height weight sex\n",
"0 170.0 54.0 Male\n",
"1 180.0 NaN Male\n",
"2 164.0 48.0 Female\n",
"3 NaN 66.0 Male\n",
"4 176.0 NaN Female\n",
"5 162.0 59.0 Male\n",
"6 154.0 46.0 Male\n",
"7 155.0 58.0 Female\n",
"8 165.0 0.0 Female\n",
"9 NaN 50.0 Female\n"
]
}
],
"source": [
"#通过pandas将csv文件转换为dataframe格式后进行操作\n",
"train1_frame = pd.read_csv('introduction.csv')\n",
"#判断每一列是否有空值并返回每列空值的数量\n",
"print(train1_frame.isnull().sum())\n",
"print(train1_frame)"
]
},
{
"cell_type": "markdown",
"id": "75d469ff",
"metadata": {},
"source": [
"2) 对每一列的缺失值和异常值进行替换操作"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "891fed76",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" height weight sex\n",
"0 170.0 54.0 Male\n",
"1 180.0 NaN Male\n",
"2 164.0 48.0 Female\n",
"3 NaN 66.0 Male\n",
"4 176.0 NaN Female\n",
"5 162.0 59.0 Male\n",
"6 154.0 46.0 Male\n",
"7 155.0 58.0 Female\n",
"8 165.0 NaN Female\n",
"9 NaN 50.0 Female\n"
]
}
],
"source": [
"#将0替换为空值,之后将空值替换为修正的值(例如:平均值、中数、众数等)\n",
"#利用pandas中的replace函数将某一列的指定值替换为另一个值\n",
"train1_frame[['height','weight']]=\\\n",
"train1_frame[['height','weight']].replace(0,np.NaN)\n",
"print(train1_frame)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1aec2a23",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" height weight sex\n",
"0 170.0 54.0 Male\n",
"1 180.0 NaN Male\n",
"2 164.0 48.0 Female\n",
"3 165.0 66.0 Male\n",
"4 176.0 NaN Female\n",
"5 162.0 59.0 Male\n",
"6 154.0 46.0 Male\n",
"7 155.0 58.0 Female\n",
"8 165.0 NaN Female\n",
"9 166.5 50.0 Female\n"
]
}
],
"source": [
"#先对height列进行分离,之后将temp按照性别进行分类,之后使用mean函数分别计算male和female非空数据的height的平均值\n",
"temp=train1_frame[train1_frame['height'].notnull()]\n",
"temp=temp[['height','sex']].groupby(['sex'])[['height']].mean().reset_index()\n",
"\n",
"#使用dataframe的loc函数将指定条件的height列和sex列筛选出来进行值替换操作\n",
"train1_frame.loc[(train1_frame['sex']=='Male')&(train1_frame['height'].isnull()),'height']=temp['height'][0]\n",
"train1_frame.loc[(train1_frame['sex']=='Female')&(train1_frame['height'].isnull()),'height']=temp['height'][1]\n",
"print(train1_frame)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "4f394062",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" height weight sex\n",
"0 170.0 54.0 Male\n",
"1 180.0 50.0 Male\n",
"2 164.0 48.0 Female\n",
"3 165.0 66.0 Male\n",
"4 176.0 56.5 Female\n",
"5 162.0 59.0 Male\n",
"6 154.0 46.0 Male\n",
"7 155.0 58.0 Female\n",
"8 165.0 56.5 Female\n",
"9 166.5 50.0 Female\n"
]
}
],
"source": [
"#再对weight列进行分离,之后同样将temp按照性别进行分类,之后使用median函数分别计算male和female非空数据的height的中位数\n",
"temp=train1_frame[train1_frame['weight'].notnull()]\n",
"temp=temp[['weight','sex']].groupby(['sex'])[['weight']].median().reset_index()\n",
"\n",
"#使用dataframe的loc函数将指定条件的height列和sex列筛选出来进行值替换操作\n",
"train1_frame.loc[(train1_frame['sex']=='Male')&(train1_frame['weight'].isnull()),'weight']=temp['weight'][0]\n",
"train1_frame.loc[(train1_frame['sex']=='Female')&(train1_frame['weight'].isnull()),'weight']=temp['weight'][1]\n",
"print(train1_frame)"
]
},
{
"cell_type": "markdown",
"id": "d0ea36f6",
"metadata": {},
"source": [
"3) 将结果值从字符串变成容易操作的整数类型"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "8341000e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" height weight sex\n",
"0 170.0 54.0 Male\n",
"1 180.0 50.0 Male\n",
"2 164.0 48.0 Female\n",
"3 165.0 66.0 Male\n",
"4 176.0 56.5 Female\n",
"5 162.0 59.0 Male\n",
"6 154.0 46.0 Male\n",
"7 155.0 58.0 Female\n",
"8 165.0 56.5 Female\n",
"9 166.5 50.0 Female\n",
" height weight sex\n",
"0 170.0 54.0 0\n",
"1 180.0 50.0 0\n",
"2 164.0 48.0 1\n",
"3 165.0 66.0 0\n",
"4 176.0 56.5 1\n",
"5 162.0 59.0 0\n",
"6 154.0 46.0 0\n",
"7 155.0 58.0 1\n",
"8 165.0 56.5 1\n",
"9 166.5 50.0 1\n"
]
}
],
"source": [
"print(train1_frame)\n",
"train1_frame['sex'] = np.where(train1_frame['sex'] == \"Male\", 0, 1)\n",
"print(train1_frame)"
]
},
{
"cell_type": "markdown",
"id": "ac00368d",
"metadata": {},
"source": [
"4) 当坐标为两维时的绘图"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "f4314e6f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#确定图画边界和大小\n",
"plt.figure(figsize=(10,5))\n",
"x_min, x_max = 0,10\n",
"y_min, y_max = 0,5\n",
"#使用numpy中的meshgrid生成网格矩阵,方便进行之后的描点\n",
"boundary_x, boundary_y = np.meshgrid(np.arange(x_min, x_max, 0.01),np.arange(y_min, y_max, 0.01))\n",
"grid = np.c_[boundary_x.ravel(), boundary_y.ravel()]\n",
"#加入偏置对应的一列\n",
"e=np.ones((len(grid),1))\n",
"grid=np.c_[e,grid]\n",
"#假定下列的模型参数\n",
"w=np.array([[0],[3],[-6]])\n",
"#计算出网格点中每个点对应的逻辑回归预测值\n",
"z=grid.dot(w)\n",
"for i in range(len(z)):\n",
" z[i][0]=(1/(1+np.exp(-z[i])))\n",
" if(z[i][0]<0.5):z[i][0]=0\n",
" else:z[i][0]=1\n",
"#转换shape以作出决策边界\n",
"z=z.reshape(boundary_x.shape)\n",
"plt.contourf(boundary_x, boundary_y, z, cmap=plt.cm.Spectral, zorder=1)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "8c07701a",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"\"\"\"\n",
"可使用plt.scatter来绘制出测试集的每个样本点,并设置指定颜色来区分预测正确和错误的样本\n",
"plt.scatter(x,y,c=\"color\"),x、y为坐标值,c为指定颜色\n",
"\"\"\"\n",
"class_1=train1_frame[train1_frame['sex']==1]\n",
"class_0=train1_frame[train1_frame['sex']==0]\n",
"plt.scatter(class_1['height'],class_1['weight'],c='blue')\n",
"plt.scatter(class_0['height'],class_0['weight'],c='red')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "657beb0c",
"metadata": {},
"source": [
"**第二部分:逻辑回归实验一**"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "226badd7",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import math\n",
"import matplotlib as mpl"
]
},
{
"cell_type": "markdown",
"id": "7a0bdb6f",
"metadata": {},
"source": [
"Iris数据集是常用的分类实验数据集,也称鸢尾花卉数据集,是一类多重变量分析的数据集。我们实验选取数据集的部分内容,包含训练集中的80个数据样本和测试集的20个样本,分为2类,每个数据包含2个属性。可通过花萼长度(x1),花萼宽度(x2)2个属性预测鸢尾花卉属于(Setosa,Versicolour)二个种类中的哪一类。"
]
},
{
"cell_type": "markdown",
"id": "70d2906a",
"metadata": {},
"source": [
"1) 使用pandas库将训练数据集'flower_train.csv'与测试数据集'flower_test.csv'载入到Dataframe对象中,并判断训练集中每列数据是否有缺失值或者不合理的数值,如果有,请在不删除数据的前提下进行处理,而测试集为完好的数据集,不需要进行操作。由于花卉类型(type)为字符串类型,请将花卉类型转换为适合模型训练的类型"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "f59640f4",
"metadata": {},
"outputs": [],
"source": [
"#your code here------"
]
},
{
"cell_type": "markdown",
"id": "75b2fd55",
"metadata": {},
"source": [
"2)在之前的线性回归实验中,我们的模型为$\\hat{y}=\\omega^T x+b$,为方便实验,该实验中我们将偏置量b划入模型参数中,则对应的模型变为$\\hat{y}=\\omega^Tx$,请进行相应的转换 \n",
"tips:上一次实验中的矩阵求解析解的方法中将某一列全设置为1,即将偏置量b算入模型参数中,特征值中加入一列全1的特征量"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "6c2c4001",
"metadata": {},
"outputs": [],
"source": [
"#your code here------"
]
},
{
"cell_type": "markdown",
"id": "fec5c2ed",
"metadata": {},
"source": [
"3) 由于逻辑回归的原理是用逻辑函数把线性回归的结果(-∞,∞)映射到(0,1)所以逻辑回归适合于二分类问题。我们使用sigmoid函数$g(z)=\\frac{1}{1+e^{-z}}$将把线性回归的结果从(-∞,∞)映射到(0,1)。 \n",
" 假设模型为线性回归模型$\\hat{y}=\\omega_0+\\omega_1 x_1+\\omega_2 x_2+...+\\omega_n x_n=\\omega^T x$,则任意样本所对应发生的概率值函数即为$g(\\hat{y})=\\frac{1}{1+e^{-\\hat{y}}}$,这样事情发生(定义为标签为1)的概率为$$P(y=1|x)=\\frac{1}{1+e^{-\\omega^T x}}$$ \n",
" 对应于任意一个样本(${x_i}$,$y_i$),其中$x_i$为特征值,$y_i$为实际结果值,在参数$\\omega$下,该样本发生的概率为$$P(y_i|x_i,\\omega)=y_i{P(y_i=1|x_i)}+({1-y_i}){P(y_i=0|x_i)}$$\n",
" 将每个样本发生概率相乘,得到似然函数:$$\\Pi^m_{i=1}{P(y_i|x_i,\\omega)}$$\n",
" 为了计算方便,一般取对数得到对数似然函数:$$L(\\omega)=\\sum^m_{i=1}{lnP(y_i|x_i,\\omega)}$$ \n",
" 我们总是希望出现预测正确的概率的可能性最大,即想要得到极大化似然函数对应的参数$\\omega$。这样最大化似然函数就转变为最小化似然函数的负数,取负的平均对数似然函数为损失函数,通过这样构建的损失函数$$J(\\omega)=-\\frac{1}{m}\\sum^m_{i=1}{lnP(y_i|x_i,\\omega)}=-\\frac{1}{m}\\sum^m_{i=1}ln(y_i\\frac{1}{1+e^{-\\omega^T x_i}}+(1-y_i)\\frac{e^{-\\omega^T x_i}}{1+e^{-\\omega^T x_i}})$$ \n",
" 手动实现梯度下降法(不使用机器学习框架,如PyTorch、TensorFlow等)来进行模型的训练。 "
]
},
{
"cell_type": "markdown",
"id": "f1a81c73",
"metadata": {},
"source": [
"算法步骤如下:①初始化模型参数$\\omega$的值;②在负梯度的方向上更新参数(由于该实验涉及样本数量较小,建议使用批量梯度下降),并不断迭代这一步骤。"
]
},
{
"cell_type": "markdown",
"id": "4e922340",
"metadata": {},
"source": [
"其中梯度的下降偏导公式为\n",
" $$\\frac{\\partial J}{\\partial \\omega_j}=\\frac{1}{m}\\sum_{i=1}^m x_{ij}(\\frac{e^{\\omega^T x_i}}{1+e^{\\omega^T x_i}}-y_i)$$ \n",
" 参数更新的公式为$$\\omega_j =\\omega_j-\\eta\\frac{\\partial J}{\\partial w_j}$$其中$\\eta$表示学习率,$m$则表示批量中的样本数量,$x_{ij}$代表着第i个样本的第j个特征值,$y_i$代表着第i个样本的真实值"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "8a92473b",
"metadata": {},
"outputs": [],
"source": [
"#your code here------"
]
},
{
"cell_type": "markdown",
"id": "b24f2e7e",
"metadata": {},
"source": [
"4)在模型训练完成后得到所训练的模型参数$\\omega$,在测试集上进行所训练模型的测试并使用之前所介绍的损失函数计算loss值"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "a4253a5c",
"metadata": {},
"outputs": [],
"source": [
"#your code here------"
]
},
{
"cell_type": "markdown",
"id": "dd339060",
"metadata": {},
"source": [
"5)使用训练后的逻辑回归模型对测试数据集'flower_test.csv'进行预测,输出可视化结果(比如用seaborn或者matplotlib等可视化库来画出测试数据的散点图以及训练好的模型函数图像),要求如下: \n",
" 1.将所得到的逻辑回归模型所得到的决策边界绘制出来 \n",
" 2.测试集的所有点在同一幅图中进行绘制 \n",
" 3.需要给不同类别的测试点不同颜色,方便通过颜色的区别直观看到预测正确和错误的样本"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "3597e87c",
"metadata": {},
"outputs": [],
"source": [
"#your code here------"
]
},
{
"cell_type": "markdown",
"id": "b869bee1",
"metadata": {},
"source": [
"**第三部分:逻辑回归实验二**"
]
},
{
"cell_type": "markdown",
"id": "cf3a5a55",
"metadata": {},
"source": [
"该数据集(train_titanic.csv和test_titanic.csv)同样为分类数据集,为泰坦尼克号的乘客信息以及最后是否生还。包括了七个特征值以及一个类别特征(即为Survived类型,代表是否生还),特征信息分别为Passengerid(乘客id),Age(乘客年龄),Fare(船票价格),Sex(性别),sibsp(堂兄弟妹个数),Parch(父母与小孩的个数),Pclass(乘客等级)"
]
},
{
"cell_type": "markdown",
"id": "f4a492fe",
"metadata": {},
"source": [
"该数据集已经做了处理,无缺失值和空值,且字符串类型全部转换成了整数类型,但是七个特征值与最后是否生还关联度不同。该实验的任务依然是在训练集上使用逻辑回归方法和手动实现的梯度下降方法完成模型训练。"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "7ebd3c1e",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import math"
]
},
{
"cell_type": "markdown",
"id": "915ff106",
"metadata": {},
"source": [
"1) 使用pandas库将训练数据集'train_titanic.csv'与测试数据集'test_titanic.csv'载入到Dataframe对象中。"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "7056ffde",
"metadata": {},
"outputs": [],
"source": [
"#your code here------"
]
},
{
"cell_type": "markdown",
"id": "9abde442",
"metadata": {},
"source": [
"2) 选择至少四个特征建立逻辑回归模型,利用梯度下降方法(由于该数据集样本数量较大,所以建议使用随机梯度下降法或小批量梯度下降法)进行模型训练,并使用10次10折交叉验证进行模型选择。"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "55e62317",
"metadata": {},
"outputs": [],
"source": [
"#your code here------"
]
},
{
"cell_type": "markdown",
"id": "95f698bc",
"metadata": {},
"source": [
"3) 使用训练后的逻辑回归模型对测试数据集'test_titanic.csv'进行预测,并计算其精度,查准率,查全率,画出P-R曲线,画出ROC曲线。"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "4dd020b7",
"metadata": {},
"outputs": [],
"source": [
"#your code here------"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}