python svm 怎么训练模型

Python015

python svm 怎么训练模型,第1张

支持向量机SVM(Support Vector Machine)是有监督的分类预测模型,本篇文章使用机器学习库scikit-learn中的手写数字数据集介绍使用Python对SVM模型进行训练并对手写数字进行识别的过程。

准备工作

手写数字识别的原理是将数字的图片分割为8X8的灰度值矩阵,将这64个灰度值作为每个数字的训练集对模型进行训练。手写数字所对应的真实数字作为分类结果。在机器学习sklearn库中已经包含了不同数字的8X8灰度值矩阵,因此我们首先导入sklearn库自带的datasets数据集。然后是交叉验证库,SVM分类算法库,绘制图表库等。

12345678910#导入自带数据集from sklearn import datasets#导入交叉验证库from sklearn import cross_validation#导入SVM分类算法库from sklearn import svm#导入图表库import matplotlib.pyplot as plt#生成预测结果准确率的混淆矩阵from sklearn import metrics

读取并查看数字矩阵

从sklearn库自带的datasets数据集中读取数字的8X8矩阵信息并赋值给digits。

12#读取自带数据集并赋值给digitsdigits = datasets.load_digits()

查看其中的数字9可以发现,手写的数字9以64个灰度值保存。从下面的8×8矩阵中很难看出这是数字9。

12#查看数据集中数字9的矩阵digits.data[9]

以灰度值的方式输出手写数字9的图像,可以看出个大概轮廓。这就是经过切割并以灰度保存的手写数字9。它所对应的64个灰度值就是模型的训练集,而真实的数字9是目标分类。我们的模型所要做的就是在已知64个灰度值与每个数字对应关系的情况下,通过对模型进行训练来对新的手写数字对应的真实数字进行分类。

1234#绘制图表查看数据集中数字9的图像plt.imshow(digits.images[9], cmap=plt.cm.gray_r, interpolation='nearest')plt.title('digits.target[9]')plt.show()

设置模型的特征X和预测目标Y

查看数据集中的分类目标,可以看到一共有10个分类,分布为0-9。我们将这个分类目标赋值给Y,作为模型的预测目标。

12#数据集中的目标分类digits.target 12#将数据集中的目标赋给YY=digits.target

手写数字的64个灰度值作为特征赋值给X,这里需要说明的是64个灰度值是以8×8矩阵的形式保持的,因此我们需要使用reshape函数重新调整矩阵的行列数。这里也就是将8×8的两维数据转换为64×1的一维数据。

123#使用reshape函数对矩阵进行转换,并赋值给Xn_samples = len(digits.images)X = digits.images.reshape((n_samples, 64))

查看特征值X和预测目标Y的行数,共有1797行,也就是说数据集中共有1797个手写数字的图像,64列是经过我们转化后的灰度值。

12#查看X和Y的行数X.shape,Y.shape

将数据分割为训练集和测试集

将1797个手写数字的灰度值采用随机抽样的方法分割为训练集和测试集,其中训练集为60%,测试集为40%。

12#随机抽取生成训练集和测试集,其中训练集的比例为60%,测试集40%X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, Y, test_size=0.4, random_state=0)

查看分割后的测试集数据,共有1078条数据。这些数据将用来训练SVM模型。

12#查看训练集的行数X_train.shape,y_train.shape

对SVM模型进行训练

将训练集数据X_train和y_train代入到SVM模型中,对模型进行训练。下面是具体的代码和结果。

12#生成SVM分类模型clf = svm.SVC(gamma=0.001) 12#使用训练集对svm分类模型进行训练clf.fit(X_train, y_train)

使用测试集测对模型进行测试

使用测试集数据X_test和y_test对训练后的SVM模型进行检验,模型对手写数字分类的准确率为99.3%。这是非常高的准确率。那么是否真的这么靠谱吗?下面我们来单独测试下。

12#使用测试集衡量分类模型准确率clf.score(X_test, y_test)

我们使用测试集的特征X,也就是每个手写数字的64个灰度值代入到模型中,让SVM模型进行分类。

12#对测试集数据进行预测predicted=clf.predict(X_test)

然后查看前20个手写数字的分类结果,也就是手写数字所对应的真实数字。下面是具体的分类结果。

12#查看前20个测试集的预测结果predicted[:20]

再查看训练集中前20个分类结果,也就是真实数字的情况,并将之前的分类结果与测试集的真实结果进行对比。

12#查看测试集中的真实结果expected=y_test

以下是测试集中前20个真实数字的结果,与前面SVM模型的分类结果对比,前20个结果是一致的。

12#查看测试集中前20个真实结果expected[:20]

使用混淆矩阵来看下SVM模型对所有测试集数据的预测与真实结果的准确率情况,下面是一个10X10的矩阵,左上角第一行第一个数字60表示实际为0,SVM模型也预测为0的个数,第一行第二个数字表示实际为0,SVM模型预测为1的数字。第二行第二个数字73表示实际为1,SVM模型也预测为1的个数。

12#生成准确率的混淆矩阵(Confusion matrix)metrics.confusion_matrix(expected, predicted)

从混淆矩阵中可以看到,大部分的数字SVM的分类和预测都是正确的,但也有个别的数字分类错误,例如真实的数字2,SVM模型有一次错误的分类为1,还有一次错误分类为7。

是的,明年一月股票价格属于逻辑回归问题。逻辑回归这个模型很神奇,虽然它的本质也是回归,但是它是一个分类模型,并且它的名字当中又包含”回归“两个字,未免让人觉得莫名其妙。

如果是初学者,觉得头晕是正常的,没关系,让我们一点点捋清楚。

让我们先回到线性回归,我们都知道,线性回归当中 y = WX + b。我们通过W和b可以求出X对应的y,这里的y是一个连续值,是回归模型对吧。但如果我们希望这个模型来做分类呢,应该怎么办?很容易想到,我们可以人为地设置阈值对吧,比如我们规定y >0最后的分类是1,y <0最后的分类是0。从表面上来看,这当然是可以的,但实际上这样操作会有很多问题。

最大的问题在于如果我们简单地设计一个阈值来做判断,那么会导致最后的y是一个分段函数,而分段函数不连续,使得我们没有办法对它求梯度,为了解决这个问题,我们得找到一个平滑的函数使得既可以用来做分类,又可以解决梯度的问题。

很快,信息学家们找到了这样一个函数,它就是Sigmoid函数,它的表达式是:

357572dfd95e096f6b1db8d0418b7666.png

它的函数图像如下:

3c9f8ea71dade02bee91d6837a9ab772.png

可以看到,sigmoid函数在x=0处取值0.5,在正无穷处极限是1,在负无穷处极限是0,并且函数连续,处处可导。sigmoid的函数值的取值范围是0-1,非常适合用来反映一个事物发生的概率。我们认为

σ(x) 表示x发生的概率,那么x不发生的概率就是 1 - σ(x) 。我们把发生和不发生看成是两个类别,那么sigmoid函数就转化成了分类函数,如果 σ(x) >0.5 表示类别1,否则表示类别0.

到这里就很简单了,通过线性回归我们可以得到

00f6409abfa62fff48ef6345454c1307.png

也就是说我们在线性回归模型的外面套了一层sigmoid函数,我们通过计算出不同的y,从而获得不同的概率,最后得到不同的分类结果。

损失函数

下面的推导全程高能,我相信你们看完会三连的(点赞、转发、关注)。

让我们开始吧,我们先来确定一下符号,为了区分,我们把训练样本当中的真实分类命名为y,y的矩阵写成 Y 。同样,单条样本写成 x , x 的矩阵写成 X。单条预测的结果写成 y_hat,所有的预测结果写成Y_hat。

对于单条样本来说,y有两个取值,可能是1,也可能是0,1和0代表两个不同的分类。我们希望 y = 1 的时候,y_hat 尽量大, y = 0 时, 1 - y_hat 尽量大,也就是 y_hat 尽量小,因为它取值在0-1之间。我们用一个式子来统一这两种情况:

4e1d139e638f22b1f7c3c34ec7ac1750.png

我们代入一下,y = 0 时前项为1,表达式就只剩下后项,同理,y = 1 时,后项为1,只剩下前项。所以这个式子就可以表示预测准确的概率,我们希望这个概率尽量大。显然,P(y|x) >0,所以我们可以对它求对数,因为log函数是单调的。所以 P(y|x) 取最值时的取值,就是 log P(y|x) 取最值的取值。

b493206f3f6ac1d18987cc2136d43e74.png

我们期望这个值最大,也就是期望它的相反数最小,我们令

bd1691f5ed6d3b14ad6678ea7ab4a73e.png

这样就得到了它的损失函数:

18ae4824989eb45abea1a568bb8afc0b.png

如果知道交叉熵这个概念的同学,会发现这个损失函数的表达式其实就是交叉熵。交叉熵是用来衡量两个概率分布之间的”距离“,交叉熵越小说明两个概率分布越接近,所以经常被用来当做分类模型的损失函数。关于交叉熵的概念我们这里不多赘述,会在之后文章当中详细介绍。我们随手推导的损失函数刚好就是交叉熵,这并不是巧合,其实底层是有一套信息论的数学逻辑支撑的,我们不多做延伸,感兴趣的同学可以了解一下。

硬核推导

损失函数有了,接下来就是求梯度来实现梯度下降了。

这个函数看起来非常复杂,要对它直接求偏导算梯度过于硬核(危),如果是许久不碰高数的同学直接肝不亚于硬抗苇名一心。

ade04cadcb25c9674f76ec1fa217eb85.png

为了简化难度,我们先来做一些准备工作。首先,我们先来看下σ 函数,它本身的形式很复杂,我们先把它的导数搞定。

77509348117bf958bd84c57fbbe2c048.png

因为 y_hat = σ(θX) ,我们将它带入损失函数,可以得到,其中σ(θX)简写成σ(θ) :

7cc17ea96bd209a6a71e30a89827553e.png

接着我们求 J(θ) 对 θ 的偏导,这里要代入上面对 σ(x) 求导的结论:

363b945b9b4cc57919d3d503c45c0ff6.png

代码实战

梯度的公式都推出来了,离写代码实现还远吗?

不过巧妇难为无米之炊,在我们撸模型之前,我们先试着造一批数据。

我们选择生活中一个很简单的场景——考试。假设每个学生需要参加两门考试,两门考试的成绩相加得到最终成绩,我们有一批学生是否合格的数据。希望设计一个逻辑回归模型,帮助我们直接计算学生是否合格。

为了防止sigmoid函数产生偏差,我们把每门课的成绩缩放到(0, 1)的区间内。两门课成绩相加超过140分就认为总体及格。

2d25f5bfaa9ec45a3089c4f12c201ccf.png

这样得到的训练数据有两个特征,分别是学生两门课的成绩,还有一个偏移量1,用来记录常数的偏移量。

接着,根据上文当中的公式,我们不难(真的不难)实现sigmoid以及梯度下降的函数。

2bf9363d9bb6a71a0e0e33a1234d5c7b.png

这段函数实现的是批量梯度下降,对Numpy熟悉的同学可以看得出来,这就是在直接套公式。

最后,我们把数据集以及逻辑回归的分割线绘制出来。

097c155cf08a23efc7d2e3d69b4704e2.png

最后得到的结果如下:

9db92f8f8681c247a6cba139152c5ca2.png

随机梯度下降版本

可以发现,经过了1万次的迭代,我们得到的模型已经可以正确识别所有的样本了。

我们刚刚实现的是全量梯度下降算法,我们还可以利用随机梯度下降来进行优化。优化也非常简单,我们计算梯度的时候不再是针对全量的数据,而是从数据集中选择一条进行梯度计算。

基本上可以复用梯度下降的代码,只需要对样本选取的部分加入优化。

cfd38e0b28894b1016968075e6a1bc3b.png

我们设置迭代次数为2000,最后得到的分隔图像结果如下:

6a1a9d6962bf1b801f0a8801883dec05.png

当然上面的代码并不完美,只是一个简单的demo,还有很多改进和优化的空间。只是作为一个例子,让大家直观感受一下:其实自己亲手写模型并不难,公式的推导也很有意思。这也是为什么我会设置高数专题的原因。CS的很多知识也是想通的,在学习的过程当中灵感迸发旁征博引真的是非常有乐趣的事情,希望大家也都能找到自己的乐趣。

今天的文章就是这些,如果觉得有所收获,请顺手点个关注或者转发吧,你们的举手之劳对我来说很重要。

相关资源:【原创】R语言对二分连续变量进行逻辑回归数据分析报告论文(代码...

文章知识点与官方知识档案匹配

算法技能树首页概览

33030 人正在系统学习中

打开CSDN,阅读体验更佳

VGG论文笔记及代码_麻花地的博客_vgg论文

VGG论文笔记及代码 VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 牛津大学视觉组(VGG)官方网站:https://www.robots.ox.ac.uk/~vgg/ Abstract 在这项工作中,我们研究了在大规模图像识别环境中卷积网络深度对其...

...MNIST研究》论文和Python代码_通信与逆向那些事的博客_机器...

1、逻辑回归算法 逻辑回归(Logistic Regression),与它的名字恰恰相反,它是一个分类器而非回归方法,在一些文献里它也被称为logit回归、最大熵分类器(MaxEnt)、对数线性分类器等。 使用sklearn.linear_model中的LogisticRegression方法来训练...

两个重要极限的推导

两个重要极限 (1) lim⁡θ→0sin⁡θθ=1 (θ为弧度) \underset{\theta \rightarrow 0}{\lim}\frac{\sin \theta}{\theta}=1\ \ \text{(}\theta \text{为弧度)} θ→0lim​θsinθ​=1 (θ为弧度) (2) lim⁡x→∞(1+1x)x=e \underset{x\rightarrow \infty}{\lim}\left( 1+\frac{1}{x} \ri

继续访问

两个重要极限及其推导过程

一、 证明:由上图可知, 即 二、 证明:首先证明此极限存在 构造数列 而对于n+1 ...

继续访问

...是多项式回归】Jeff Dean等论文发现逻辑回归和深度学习一样好_qq...

其中,基线 aEWS(augmented Early Warning Score)是一个有 28 个因子的逻辑回归模型,在论文作者对预测患者死亡率的传统方法 EWS 进行的扩展。而 Full feature simple baseline 则是 Uri Shalit 说的标准化逻辑回归。 注意到基线模型(红...

数学模型——Logistic回归模型(含Matlab代码)_苏三有春的博客...

Logistic回归模型是一种非常常见的统计回归模型,在处理大量数据,揭示各自变量如何作用于因变量(描述X与Y之间的关系)时有着十分重要的作用。笔者在写Logit回归模型前参加了一次市场调研比赛,在这次比赛中学到了很多东西,同时发现,许多优秀获...

《神经网络设计》第二章中传递函数

import math #硬极限函数 def hardlim(data): if data <0: a = 0 else: a = 1 print("fun:hardlim,result:%f"%a) #对称硬极限函数 def hardlims(data): if data <0: a = -1 e

继续访问

两个重要极限定理推导

两个重要极限定理: lim⁡x→0sin⁡xx=1(1) \lim_{x \rightarrow 0} \frac{\sin x}{x} = 1 \tag{1} x→0lim​xsinx​=1(1) 和 lim⁡x→∞(1+1x)x=e(2) \lim_{x \rightarrow \infty} (1 + \frac{1}{x})^x = e \tag{2} x→∞lim​(1+x1​)x=e(2) 引理(夹逼定理) 定义一: 如果数列 {Xn}\lbrace X_n \rbrace{Xn​},{Yn}

继续访问

【原创】R语言对二分连续变量进行逻辑回归数据分析报告论文(代码...

【原创】R语言对二分连续变量进行逻辑回归数据分析报告论文(代码数据).docx资源推荐 资源评论 鲸鱼算法(WOA)优化变分模态分解(VMD)参数python 5星 · 资源好评率100% 1.python程序 2.有数据集,可直接运行 matlab批量读取excel表格数据...

机器学习--逻辑回归_科技论文精讲的博客

机器学习-逻辑回归分析(Python) 02-24 回归和分类方法是机器学习中经常用到的方法区分回归问题和分类问题:回归问题:输入变量和输出变量均为连续变量的问题分类问题:输出变量为有限个离散变量的问题。因此分类及回归分别为研究这两类问题...

常见函数极限

lim⁡x→0sin⁡x=1\lim_{x\to 0}\frac{\sin}{x}=1x→0lim​xsin​=1 lim⁡x→∞(1+1x)x=e\lim_{x\to \infty}(1+\frac{1}{x})^x=ex→∞lim​(1+x1​)x=e lim⁡α→0(1+α)1α=e\lim_{\alpha\to 0}(1+\alpha)^\frac{1}{\alpha}=eα→0lim​(...

继续访问

逻辑回归原理及代码实现

公式自变量取值为任意实数,值域[0,1]解释将任意的输入映射到了[0,1]区间,我们在线性回归中可以得到一个预测值,再将该值映射到Sigmoid函数中这样就完成了由值到概率的转换,也就是分类任务预测函数其中,分类任务整合解释对于二分类任务(0,1),整合后y取0只保留,y取1只保留似然函数对数似然此时应用梯度上升求最大值,引入转换为梯度下降任务求导过程参数更新多分类的softmax。............

继续访问

python手写数字识别论文_Python利用逻辑回归模型解决MNIST手写数字识别问...

本文实例讲述了Python利用逻辑回归模型解决MNIST手写数字识别问题。分享给大家供大家参考,具体如下: 1、MNIST手写识别问题 MNIST手写数字识别问题:输入黑白的手写阿拉伯数字,通过机器学习判断输入的是几。可以通过TensorFLow下载MNIST手写数据集,...

逻辑回归问题整理_暮雨林钟的博客

逻辑回归问题整理 之前只是简单的接触过逻辑回归,今天针对于最近看论文的疑惑做一个整理逻辑回归与极大似然的关系: 逻辑回归的提出主要是在线性问题下为分类问题而提出的简单来说,针对于一个二分类问题,我们需要将线性函数映射为一...

机器学习算法-逻辑回归(一):基于逻辑回归的分类预测(代码附详细注释)

1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个字,但逻辑回归其实是一个分类模型,并且广泛应用于各个领域之中。虽然现在深度学习相对于这些传统方法更为火热,但实则这些传统方法由于其独特的优势依然广泛应用于各个领域中。 而对于逻辑回归而且,最为突出的两点就是其模型简单和模型的可解释性强。 逻辑回归模型的优劣势: 优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低; 缺点:容易欠拟合,分类精度可能不高 1.2

继续访问

逻辑回归:原理+代码

(作者:陈玓玏) 逻辑回归算是传统机器学习中最简单的模型了,它的基础是线性回归,为了弄明白逻辑回归,我们先来看线性回归。 一、线性回归 假设共N个样本,每个样本有M个特征,这样就产生了一个N*M大小的样本矩阵。令矩阵为X,第i个样本为Xi,第i个样本的第j个特征为Xij。令样本的观测向量为Y,第i个样本的观测值为Yi,那么就会有以下公式: (X+[1]N*1)*W = Y 也就是说,...

继续访问

浅谈逻辑回归_jzhx107的博客

LMSE回归的回归平面受左上角两个绿色样本的影响而向上倾斜。 支持向量机的分离平面只由两个支持向量决定。 另外我们看到,在本例中逻辑回归和支持向量机得到的分离平面很接近,但是支持向量机的推导和训练过程要比逻辑回归复杂很多。所以加州...

论文研究-基于HBase的多分类逻辑回归算法研究.pdf_多分类逻辑回归...

论文研究-基于HBase的多分类逻辑回归算法研究.pdf,为解决在大数据环境下,用于训练多分类逻辑回归模型的数据集可能会超过执行计算的客户端内存的问题,提出了块批量梯度下降算法,用于计算回归模型的系数。将训练数据集存入HBase后,通过设置表...

【机器学习】 逻辑回归原理及代码

大家好,我是机器侠~1 Linear Regression(线性回归)在了解逻辑回归之前,我们先简单介绍一下Linear Regression(线性回归)。线性回归是利用连续性的变量来预估实际数值(比如房价),通过找出自变量与因变量之间的线性关系,确定一条最佳直线,称之为回归线。并且,我们将这个回归关系表示为2 Logistic Regression(...

继续访问

最新发布 【大道至简】机器学习算法之逻辑回归(Logistic Regression)详解(附代码)---非常通俗易懂!

逻辑回归详细推导,附github代码

继续访问

第二重要极限公式推导过程_机器学习——一文详解逻辑回归「附详细推导和代码」...

在之前的文章当中,我们推导了线性回归的公式,线性回归本质是线性函数,模型的原理不难,核心是求解模型参数的过程。通过对线性回归的推导和学习,我们基本上了解了机器学习模型学习的过程,这是机器学习的精髓,要比单个模型的原理重要得多。新关注和有所遗忘的同学可以点击下方的链接回顾一下之前的线性回归和梯度下降的内容。讲透机器学习中的梯度下降机器学习基础——线性回归公式推导(附代码和演示图)回归与分类在机器学习...

继续访问

机器学习之逻辑回归,代码实现(附带sklearn代码,小白版)

用小白的角度解释逻辑回归,并且附带代码实现

继续访问

热门推荐 两个重要极限及相关推导极限

两个重要极限: ①limx→0sinxx=1\lim_{x \to 0}\frac{\sin x}{x} = 1 ②limx→∞(1+1x)x=e\lim_{x \to \infty}(1 + \frac{1}{x})^x = e 关于重要极限①的推导极限可以参考: 无穷小的等价代换 由重要极限②可以推导出: limx→∞(1+1x)x⇒limx→0(1+x)1x=e\lim_{x \t

继续访问

(一)机器学习——逻辑回归(附完整代码和数据集)

什么是逻辑回归? 首先逻辑回归是一种分类算法。逻辑回归算法和预测类算法中的线性回归算法有一定的类似性。简单来讲,逻辑回归,就是通过回归的方法来进行分类,而不是进行预测,比如预测房价等。 逻辑回归解决的问题 先看下面的图,已知平面上分布的红点和蓝点,逻辑回归算法就是解决怎么根据一系列点,计算出一条直线(或者是平面)将平面上的点分成两类,一般的解决方法就是建立一个数学模型,然后通过迭代优化得到一个最优...

继续访问

机器学习:逻辑回归及其代码实现

一、逻辑回归(logistic regression)介绍 逻辑回归,又称为对数几率回归,虽然它名字里面有回归二字,但是它并不像线性回归一样用来预测数值型数据,相反,它一般用来解决分类任务,特别是二分类任务。 本质上,它是一个percetron再加上一个sigmoid激活函数,如下所示: 然后逻辑回归采用的损失函数是交叉熵: ...

继续访问

逻辑回归,原理及代码实现

Ⅰ.逻辑回归概述: 逻辑回归(LR,Logistic Regression)是传统机器学习中的一种分类模型,它属于一种在线学习算法,可以利用新的数据对各个特征的权重进行更新,而不需要重新利用历史数据训练。因此在实际开发中,一般针对该类任务首先都会构建一个基于LR的模型作为Baseline Model,实现快速上线,然后在此基础上结合后续业务与数据的演进,不断的优化改进。 由于LR算法具有简单、高效、易于并行且在线学习(动态扩展)的特点,在工业界具有非常广泛的应用。例如:评论信息正负情感分析(二分类)、用户点

继续访问

逻辑(logistic)回归算法原理及两种代码实现

①简单介绍了逻辑回归的原理 ②介绍了两种代码实现方法

继续访问

由两个重要极限推导常见等价无穷小以及常见导数公式

两个重要极限 第一个重要极限 lim⁡x→0xsinx=1 \lim_{x\rightarrow0}\frac{x}{sinx}=1x→0lim​sinxx​=1 第二个重要极限 lim⁡x→+∞(1+1x)x=e \lim_{x\rightarrow+\infty}(1+\frac{1}{x})^x=ex→+∞lim​(1+x1​)x=e 等价无穷小 1. ln(1+x)~x lim⁡x→0ln(1+x)x=lim⁡x→0ln(1+x)1x=ln(lim⁡x→+∞(1+1x)x)=lne=1 \lim_{

继续访问

机器学习——逻辑回归算法代码实现

机器学习——逻辑回归算法代码实现前言一、逻辑回归是什么?二、代码实现1.数据说明2.逻辑回归代码 前言 最近准备开始学习机器学习,后续将对学习内容进行记录,该文主要针对逻辑回归代码实现进行记录!同时也准备建一个群,大家可以进行交流,微信:ffengjixuchui 一、逻辑回归是什么? 逻辑回归概念篇可看博主之前的文章,传送门 二、代码实现 1.数据说明 你想根据两次考试的结果来决定每个申请人的录取机会。你有以前的申请人的历史数据,你可以用它作为逻辑回归的训练集。