摘要:使用logistic回归来预测某个人的入学申请是否会被接受

声明:(本文的内容非原创,但经过本人翻译和总结而来,转载请注明出处)

本文内容来源:https://www.dataquest.io/mission/59/logistic-regression

 

原始数据展示

这是一份美国入学申请的录取记录表,admit – 是否录取,1代表录取,0代表否定;gpa – gpa成绩,gre – 绩点

import pandas

admissions = pandas.read_csv('admissions.csv')

在之前已经介绍过了线性回归,现在同样使用线性回归来进行预测

from sklearn.linear_model import LinearRegression

model = LinearRegression()

#训练模型

model.fit(admissions[['gre', 'gpa']], admissions["admit"])

admit_prediction = model.predict(admissions[['gre', 'gpa']])

plt.xlabel('gpa')

plt.ylabel('admit_prediction')

plt.scatter(admissions["gpa"], admit_prediction)

plt.show()

在上图中可见,有些预测结果小于0,而这明显是不对的,因为预测结果应该只能为0或者1,我们现在需要获取一个介于0和1之间的概率,然后通过之前的文章中介绍过的分类算法(机器学习简易入门(二)- 分类)来确定录取一个人的概率的阀值来决定录取结果,最终生成只有0和1的结果

 

logistic回归函数

logistic回归产生的输出都位于0和1之间,通常用来产生预测某个事件的发生概率,该函数的格式为,其中的e是一个无理数常量,该函数有一个很漂亮的形状

# logistic回归函数

def logit(x):

return np.exp(x) / (1 + np.exp(x)) 

# 在-6到6之间等差产生50个数

t = np.linspace(-6,6,50, dtype=float)

ylogit = logit(t)

#作图

plt.plot(t, ylogit, label="logistic")

plt.ylabel("Probability")

plt.xlabel("t")

plt.title("Logistic Function")

plt.show()

logistic回归

在线性回归方程中,可以将该方程产生的结果y放入到logistic回归方程,从而将线性方程产生的结果转换为一个概率,对于本文来说,这个logistic回归方程为,现在根据这个logistic回归方程就能产生一个录取概率。

类似于之前使用scikit-learn库中的线性回归,现在也可以直接使用该库中的logistic回归

from sklearn.linear_model import LogisticRegression

#对数据集进行随机重排序
admissions = admissions.loc[np.random.permutation(admissions.index)] # 将随机排序后的前700条数据作为训练集,后面的作为测试集
num_train = 700
data_train = admissions[:num_train]
data_test = admissions[num_train:] logistic_model = LogisticRegression()
logistic_model.fit(data_train[['gpa', 'gre']], data_train['admit']) # 进行测试
fitted_test = logistic_model.predict_proba(data_test[['gpa', 'gre']])[:, 1] #因为predict_proba返回的是一个两列的矩阵,矩阵的每一行代表的是对一个事件的预测结果,第一列代表该事件不会发生的概率,第二列代表的是该事件会发生的概率。而这里需要的是第二列的数据
plt.scatter(data_test['gre'], fitted_test)
plt.xlabel('gre')
plt.ylabel('probability ')
plt.show()

评估模型

准确率

现在假设只要录取概率大于0.5的就能录取,计算一下这个模型的准确性

# predict()函数会自动把阀值设置为0.5

predicted = logistic_model.predict(data_train[['gpa','gre']])

# 计算在训练集中正确预测的准确率

accuracy_train = (predicted == data_train['admit']).mean()

#计算在测试集中正确预测的准确率

predicted = logistic_model.predict(data_test[['gpa','gre']])

accuracy_test = (predicted == data_test['admit']).mean()

ROC曲线

分别计算训练集和测试集的ROC曲线和AUC

from sklearn.metrics import roc_curve, roc_auc_score

train_probs = logistic_model.predict_proba(data_train[['gpa', 'gre']])[:,1]

test_probs = logistic_model.predict_proba(data_test[['gpa', 'gre']])[:,1]

#计算AUC

auc_train = roc_auc_score(data_train["admit"], train_probs)

auc_test = roc_auc_score(data_test["admit"], test_probs)

print('Auc_train: {}'.format(auc_train))

print('Auc_test: {}'.format(auc_test))

# 计算ROC曲线

roc_train = roc_curve(data_train["admit"], train_probs)

roc_test = roc_curve(data_test["admit"], test_probs)

# 作图

plt.plot(roc_train[0], roc_train[1])

plt.plot(roc_test[0], roc_test[1])

机器学习简易入门(四)- logistic回归的更多相关文章

  1. 机器学习入门-逻辑(Logistic)回归(1)

    原文地址:http://www.bugingcode.com/machine_learning/ex3.html 关于机器学习的教程确实是太多了,处于这种变革的时代,出去不说点机器学习的东西,都觉得自 ...

  2. 机器学习算法( 五、Logistic回归算法)

    一.概述 这会是激动人心的一章,因为我们将首次接触到最优化算法.仔细想想就会发现,其实我们日常生活中遇到过很多最优化问题,比如如何在最短时间内从A点到达B点?如何投入最少工作量却获得最大的效益?如何设 ...

  3. 机器学习实战笔记5(logistic回归)

    1:简单概念描写叙述 如果如今有一些数据点,我们用一条直线对这些点进行拟合(改线称为最佳拟合直线),这个拟合过程就称为回归.训练分类器就是为了寻找最佳拟合參数,使用的是最优化算法. 基于sigmoid ...

  4. 机器学习(六)— logistic回归

    最近一直在看机器学习相关的算法,今天学习logistic回归,在对算法进行了简单分析编程实现之后,通过实例进行验证. 一 logistic概述 个人理解的回归就是发现变量之间的关系,也就是求回归系数, ...

  5. 【机器学习】分类算法——Logistic回归

    一.LR分类器(Logistic Regression Classifier) 在分类情形下,经过学习后的LR分类器是一组权值w0,w1, -, wn,当测试样本的数据输入时,这组权值与测试数据按照线 ...

  6. 《机器学习实战》-逻辑(Logistic)回归

    目录 Logistic 回归 本章内容 回归算法 Logistic 回归的一般过程 Logistic的优缺点 基于 Logistic 回归和 Sigmoid 函数的分类 Sigmoid 函数 Logi ...

  7. <机器学习实战>读书笔记--logistic回归

    1. 利用logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类. 2.sigmoid函数的分类 Sigmoid函数公式定义 3.梯度上升法    基本思想:要找 ...

  8. 机器学习之线性回归以及Logistic回归

    1.线性回归 回归的目的是预测数值型数据的目标值.目标值的计算是通过一个线性方程得到的,这个方程称为回归方程,各未知量(特征)前的系数为回归系数,求这些系数的过程就是回归. 对于普通线性回归使用的损失 ...

  9. 机器学习入门 - 逻辑(Logistic)回归(5)

    原文地址:http://www.bugingcode.com/machine_learning/ex7.html 把所有的问题都转换为程序问题,可以通过程序来就问题进行求解了. 这里的模拟问题来之于C ...

随机推荐

  1. SVN小小用法(一)svn服务器搭建

    最近由于公司项目用SVN作为版本控制工具,本着学一点是一点的原则,今天小配了下svn,给大家介绍一下 软件:TortoiseSVN-1.8.3.24901-win32-svn-1.8.4.msi(本人 ...

  2. Android JNI学习之javah命令的正确使用(找了好半天才找到的,汉,网上好多说法都没用)

    按照网上抄来的javah用法一般出错,今天查了一下午在一篇文章(http://www.ibm.com/developerworks/cn/java/j-jtctips/part6/index2.htm ...

  3. (Loadrunner)Error: Failed to send data by channels - post message failed.(转)

    把Diagnotics-configure-Web Page Diagnotics 设置为 转自: http://www.51testing.com/html/64/371664-3708254.ht ...

  4. 让执行程序引用特定目录下的Dll

    当写一个软件,特别是大型的软件,经常会引用一些第三方的类库,再加上一些自己的项目,如果这些Dll全都放在主目录下的话,会显得比较杂乱.我们希望将项目的类库分类成文件夹存放,这样才显得比较整洁. 解决方 ...

  5. UDKtoUE4Tool-UDKUE3资源移植UE4工具

    UDKtoUE4Tool UDKtoUE4Tool 是一个把UE3/UDK资源包(T3D格式)转换成UE4(T3D格式)的工具.作者Matt3D使用C#实现,未来考虑发布到Unreal Marketp ...

  6. Flex4 自定义通用的ImageButton

    Flex4与之前版本的一个极大区别就是外观皮肤的分离,虽然进一步解耦,但存在一个不爽的地方就是增加了编码的工作量,你能想象为你的每个自定义组件都写一个对应的皮肤吗?可能仅仅和你之前写过的组件差了那么一 ...

  7. 微信公众号发起微信支付 c#

    tenpay.dll: MD5Util.cs using System; using System.Collections.Generic; using System.Linq; using Syst ...

  8. mongodb分组,的两种方式,先记一下

    using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using NationalUnion.AdGalle ...

  9. 用C++实现网络编程---抓取网络数据包的实现方法

    一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各 ...

  10. CLRS:Insert sort in in c

    #include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#define ...