大学生录取预测——逻辑回归

Dataset

每年高中生和大学生都会申请进入到各种各样的高校和事业单位中去。每个学生都有一组独一无二的考试分数,成绩,和背景。录取委员会根据这个决定接受或拒绝这些申请者。在这种情况下一个二进制分类算法可用于接受或拒绝申请。逻辑回归是一个合适的方法,我们将在这个任务中解决这个问题

  • 数据集admissions.csv包含了1000个申请者的信息,特征如下:

gre - Graduate Record Exam(研究生入学考试), a generalized test for prospective graduate students(一个通用的测试未来的研究生), continuous between 200 and 800.

gpa - Cumulative grade point average(累积平均绩点), continuous between 0.0 and 4.0.

admit - Binary variable, 0 or 1, where 1 means the applicant was admitted to the program.

Use Linear Regression To Predict Admission

  • 这是原本的数据,admit的值是0或者1
import pandas
import matplotlib.pyplot as plt
admissions = pandas.read_csv("admissions.csv")
plt.scatter(admissions["gpa"], admissions["admit"])
plt.show()

  • 这是通过线性回归模型预测的admit的值,发现取值范围较大,甚至有负值,不是我们想要的。
# The admissions DataFrame is in memory

# Import linear regression class
from sklearn.linear_model import LinearRegression

# Initialize a linear regression model
model = LinearRegression()

# Fit model
model.fit(admissions[[‘gre‘, ‘gpa‘]], admissions["admit"])

# Prediction of admission
admit_prediction = model.predict(admissions[[‘gre‘, ‘gpa‘]])

# Plot Estimated Function
plt.scatter(admissions["gpa"], admit_prediction)

  • 因此我们期望构造一个模型,能够给我们一个接受(admission)的概率,并且这个概率取值在[0~1],然后我们根据银行信用卡批准——模型评估ROC&AUC这篇文章的方法来选择合适的阈值进行分类。

The Logit Function

逻辑回归是一个流行的分类方法,它将输出限制在0和1之间。这个输出可以被视为一个给定一组输入某个事件的概率,就像任何其他分类方法。

  • logit function是逻辑回归的基础,这个函数的形式如下:

  • 观察一下logit function的样子:
# Logistic Function
def logit(x):
    # np.exp(x) raises x to the exponential power, ie e^x. e ~= 2.71828
    return np.exp(x) / (1 + np.exp(x)) 

# Linspace is as numpy function to produced evenly spaced numbers over a specified interval.
# Create an array with 50 values between -6 and 6 as t
t = np.linspace(-6,6,50, dtype=float)

# Get logistic fits
ylogit = logit(t)

# plot the logistic function
plt.plot(t, ylogit, label="logistic")
plt.ylabel("Probability")
plt.xlabel("t")
plt.title("Logistic Function")
plt.show()
a = logit(-10)
b = logit(10)
‘‘‘
a:4.5397868702434395e-05
b:0.99995460213129761
‘‘‘

The Logistic Regression

  • 逻辑回归就是将线性回归的输出当做Logit Function的输入然后产生一个输出当做最终的概率。其中β0是截距,其他的βi是斜率,也是特征的系数。

  • 与线性模型一样,我们想要找到最优的βi的值使得预测值与真实值之间的误差最小。通常用来最小化误差的方法是最大似然法和梯度下降法。

Model Data

  • 下面进行逻辑回归实验,每次进行训练测试集划分之前,需要将样本数据进行洗牌,这样抽样具有随机性。看到最后的gre和预测值的关系发现,当gre越大时,被接受的概率越大,这是符合实际情况的。
from sklearn.linear_model import LogisticRegression

# Randomly shuffle our data for the training and test set
admissions = admissions.loc[np.random.permutation(admissions.index)]

# train with 700 and test with the following 300, split dataset
num_train = 700
data_train = admissions[:num_train]
data_test = admissions[num_train:]

# Fit Logistic regression to admit with gpa and gre as features using the training set
logistic_model = LogisticRegression()
logistic_model.fit(data_train[[‘gpa‘, ‘gre‘]], data_train[‘admit‘])

# Print the Models Coefficients
print(logistic_model.coef_)
‘‘‘
[[ 0.38004023  0.00791207]]
‘‘‘

# Predict the chance of admission from those in the training set
fitted_vals = logistic_model.predict_proba(data_train[[‘gpa‘, ‘gre‘]])[:,1]
fitted_test = logistic_model.predict_proba(data_test[[‘gpa‘, ‘gre‘]])[:,1]

plt.scatter(data_test["gre"], fitted_test)
plt.show()

Predictive Power

  • 这里有个用法需要提一下,accuracy_train = (predicted == data_train[‘admit’]).mean()中predicted == data_train[‘admit’]得到是一个布尔型array,在计算mean()时,会将True记作1,False记作0,然后求均值。但是在list中是不行的,list对象的布尔型数据没有mean()这个函数。
# .predict() using a threshold of 0.50 by default
predicted = logistic_model.predict(data_train[[‘gpa‘,‘gre‘]])

# The average of the binary array will give us the accuracy
accuracy_train = (predicted == data_train[‘admit‘]).mean()

# Print the accuracy
print("Accuracy in Training Set = {s}".format(s=accuracy_train))
‘‘‘
# 这种输出方式也很好
Accuracy in Training Set = 0.7785714285714286
‘‘‘
# Percentage of those admitted
percent_admitted = data_test["admit"].mean() * 100

# Predicted to be admitted
predicted = logistic_model.predict(data_test[[‘gpa‘,‘gre‘]])

# What proportion of our predictions were true
accuracy_test = (predicted == data_test[‘admit‘]).mean()
  • sklearn中的逻辑回归的阈值默认设置为0.5

Admissions ROC Curve

  • 逻辑回归中的predict_proba这个函数返回的不是类标签,而是接受的概率,这可以允许我们自己修改阈值。首先我们需要作出它的ROC曲线来观察合适阈值:
from sklearn.metrics import roc_curve, roc_auc_score

# Compute the probabilities predicted by the training and test set
# predict_proba returns probabilies for each class.  We want the second column
train_probs = logistic_model.predict_proba(data_train[[‘gpa‘, ‘gre‘]])[:,1]
test_probs = logistic_model.predict_proba(data_test[[‘gpa‘, ‘gre‘]])[:,1]
# Compute auc for training set
auc_train = roc_auc_score(data_train["admit"], train_probs)

# Compute auc for test set
auc_test = roc_auc_score(data_test["admit"], test_probs)

# Difference in auc values
auc_diff = auc_train - auc_test

# Compute ROC Curves
roc_train = roc_curve(data_train["admit"], train_probs)
roc_test = roc_curve(data_test["admit"], test_probs)

# Plot false positives by true positives
plt.plot(roc_train[0], roc_train[1])
plt.plot(roc_test[0], roc_test[1])

可以看到ROC曲线开始非常的陡峭,慢慢地变得平缓。测试集的AUC值是0.79小于训练集的AUC值0.82.这些迹象表明我们的模型可以根据gre和gpa来预测是否录取了。

时间: 2024-10-10 00:14:46

大学生录取预测——逻辑回归的相关文章

「数据挖掘入门系列」挖掘建模之分类与预测–逻辑回归

拿电商行业举例,经常会遇到以下问题: 如果基于商品的历史销售情况,以及节假日.气候.竞争对手等影响因素,对商品的销量进行趋势预测? 如何预测未来一段时间哪些客户会流失,哪些客户可能会成为VIP用户? 如果预测一种新商品的销售量,以及哪种类型的客户会比较喜欢? 除此之外,运营部门需要通过数据分析来了解具有某些特征的客户的消费习惯,管理人员希望了解下一个月的销售收入等,这些都是分类与预测的日志. 分类和预测是预测问题的两种主要类型. 分类主要是预测分类标号(离散值) 预测主要是建立连续值函数模型 挖

Python之逻辑回归模型来预测

建立一个逻辑回归模型来预测一个学生是否被录取. import numpy as np import pandas as pd import matplotlib.pyplot as plt import os path='data'+os.sep+'Logireg_data.txt' pdData=pd.read_csv(path,header=None,names=['Exam1','Exam2','Admitted']) pdData.head() print(pdData.head())

逻辑回归模型预测股票涨跌

http://www.cnblogs.com/lafengdatascientist/p/5567038.html 逻辑回归模型预测股票涨跌 逻辑回归是一个分类器,其基本思想可以概括为:对于一个二分类(0~1)问题,若P(Y=1/X)>0.5则归为1类,若P(Y=1/X)<0.5,则归为0类. 一.模型概述 1.Sigmoid函数 为了具象化前文的基本思想,这里介绍Sigmoid函数: 函数图像如下: 红色的线条,即x=0处将Sigmoid曲线分成了两部分:当 x < 0,y <

竞价广告系统-点击率预测和逻辑回归

点击率预测和逻辑回归 点击率预测 从广告索引中我们得到很多的广告候选,这些广告从逻辑上都满足广告主的定向条件,即广告主定向条件的DNF范式,在竞价广告系统中,我们要选择一个最优的方案,最优的广告投送出来,一般最优的广告是通过eCpm进行排序,用广义第二高价进行排序,进行收费的模式.在CPC环境中eCpm=bid * ctr,那么对CTR的预测就是竞价广告系统中最重要的一个部分. 每个公司都对点击率预测有不同的做法,做法也非常多,这里只描述一下人人对这个问题的理解和看法. 广告点击预测概率模型:

机器学习第一步——用逻辑回归及随机森林实现泰坦尼克号的生存预测

1.实验背景 本次实验是Kaggle上的一个入门比赛——Titanic: Machine Learning from Disaster.比赛选择了泰坦尼克号海难作为背景,并提供了样本数据及测试数据,要求我们根据样本数据内容建立一个预测模型,对于测试数据中每个人是否获救做个预测.样本数据包括891条乘客信息及获救情况,测试数据有418条乘客信息.样本数据的样例如下: Passenger:乘客唯一识别id Survived:是否存活,0为否,1为是 Pclass:船舱等级,1.2.3等 Name:姓

逻辑回归和梯度下降简单应用案例

实例: 我们将建立一个逻辑回归模型来预测一个学生是否被大学录取. 假设你是一个大学系的管理员,你想根据两次考试的结果来决定每个申请人的录取机会. 你有以前的申请人的历史数据,你可以用它作为逻辑回归的训练集. 对于每一个培训例子,你有两个考试的申请人的分数和录取决定. 为了做到这一点,我们将建立一个分类模型,根据考试成绩估计入学概率. data.txt: 34.62365962451697,78.0246928153624,0 30.28671076822607,43.89499752400101

sklearn逻辑回归实战

目录 题目要求 ex2data1.txt处理 方案一:无多项式特征 方案二:引入多项式特征 ex2data2.txt处理 两份数据 ex2data1.txt ex2data2.txt 题目要求 根据学生两门课的成绩和是否入学的数据,预测学生能否顺利入学:利用ex2data1.txt和ex2data2.txt中的数据,进行逻辑回归和预测. 数据放在最后边. ex2data1.txt处理 作散点图可知,决策大致符合线性关系,但还是有弯曲(非线性),用线性效果并不好,因此可用两种方案:方案一,无多项式

机器学习—逻辑回归理论简介

下面是转载的内容,主要是介绍逻辑回归的理论知识,先总结一下自己看完的心得 简单来说线性回归就是直接将特征值和其对应的概率进行相乘得到一个结果,逻辑回归则是这样的结果上加上一个逻辑函数 这里选用的就是Sigmoid函数,在坐标尺度很大的情况下类似于阶跃函数 在确认特征对应的权重值也就是回归系数的时候 最常用的方法是最大似然法,EM参数估计,这个是在一阶导数能够有解的前提下 如果一阶导数无法求得解析值,那么一般选取梯度上升法,通过有限次的迭代过程,结合代价函数更新回归系数至收敛 //////////

逻辑回归算法

使用线性模型进行回归学习,但若要做分类任务该怎么办呢?答案蕴含在广义线性模型中:只需要找一个单调可微的函数将分类任务的真实标记y与线性回归模型的预测值联系起来. 对数几率函数是一个常用的替代函数: 该函数的图像如下图(来源:维基百科): 对数几率函数又称作"sigmoid函数",将z值转化为一个接近0或1的y值. 二.逻辑会回参数求解过程 三.Logistic Regression的适用性 1) 可用于概率预测,也可用于分类. 并不是所有的机器学习方法都可以做可能性概率预测(比如SVM