1,什么是逻辑回归(Logistic Regression)

逻辑回归用于二分分类问题,二分分类问题的标签值只有两个,比如 对于一首歌喜欢或者不喜欢;对于一件商品,喜欢或者不喜欢;对于某个考生,考试成绩 及格或者不及格。

其思想也是基于线性回归(Logistic Regression属于广义线性回归模型),分类算法用到了逻辑函数 ,因为逻辑函数的参数又用到了线性回归函数,所以才被称为逻辑回归。

逻辑函数的数值是介于0到1之间,中间值为0.5,通过一个函数可以把y的值控制在0到1之间。

分类问题的本质是决策面,如果逻辑函数得到的概率值y>=0.5 标签=1 ,如果y< 0.5 ,标签=0

逻辑回归模型准确率 ,用正确率来衡量

【准确率】 = 正确分类个数 / 数据总数

2,分类和回归的区别

3,用Python实现逻辑回归

3.1 收集数据

# 通过有序字典创建一个有序数据集

from collections import OrderedDict

import pandas as pd

examDict={

'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,

2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],

'通过考试':[0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]

}

examOrderDict=OrderedDict(examDict)

examDf=pd.DataFrame(examOrderDict)

examDf.head()

3.2 特征提取

特征提取

# 特征X 与标签y提取

exam_X = examDf.loc[:,'学习时间']

exam_y = examDf.loc[:,'通过考试']

绘制散点图对数据有个直观的认识

# 通过绘制散点图来对数据有个直观的认识,从散点图来看明显不适合用最佳拟合线来

import matplotlib.pyplot as plt

plt.scatter(exam_X,exam_y,color='b',label='exam data')

plt.xlabel('Hours')

plt.ylabel("Pass")

plt.show()

3.3 建立训练、测试数据集

#建立训练、测试数据集;一般把原始数据8/2 开

from sklearn.cross_validation import train_test_split

X_train,X_test,y_train,y_test = train_test_split(exam_X,exam_y,train_size=.8)

print('原始数据特征:',exam_X.shape ,

',训练数据特征:', X_train.shape ,

',测试数据特征:',X_test.shape )

print('原始数据标签',exam_y.shape,

'训练数据标签',y_train.shape,

'测试数据标签',y_test.shape)

返回结果:

原始数据特征: (20,) ,训练数据特征: (16,) ,测试数据特征: (4,)

原始数据标签 (20,) 训练数据标签 (16,) 测试数据标签 (4,)

# 绘制散点图,更形象展示训练数据集、测试数据集

# 蓝色为训练数据集,红色为测试数据集

import matplotlib.pyplot as plt

plt.scatter(X_train,y_train,color='blue',label='train data')

plt.scatter(X_test,y_test,color='red',label='test data')

plt.legend(loc=2)

plt.xlabel('Hours')

plt.ylabel('Pass')

plt.show()

3.4 构建模型

#第0步:输入的数据只有1个特征,需要用array.reshape(-1, 1)来改变数组的形状

X_train = X_train.values.reshape(-1,1)

X_test = X_test.values.reshape(-1,1)

#第1步:导入逻辑回归

from sklearn.linear_model import LogisticRegression

# 第2步:创建模型:逻辑回归

model = LogisticRegression()

#第3步:训练模型

model.fit(X_train,y_train)

返回结果:

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,

intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,

penalty='l2', random_state=None, solver='liblinear', tol=0.0001,

verbose=0, warm_start=False)

3.5 模型评估

#模型评估(使用测试数据)

model.score(X_test,y_test)

返回结果:

0.75

正确率0.75,模型还不错。

#获取概率值

#第1个值是标签为0的概率值,第2个值是标签为1的概率值

model.predict_proba(3)

返回结果:

array([[0.44701593, 0.55298407]])

理解逻辑回归函数

'''

理解逻辑回归函数

斜率slope

截距intercept

'''

import numpy as np

a=model.intercept_

b=model.coef_

x=3

z=a+b*x

y_pred=1/(1+np.exp(-z))

print('预测的概率值:',y_pred)

返回结果:

预测的概率值: [[0.55298407]]

概率值大于0.5,表示学生花费3小时,通过考试

4,实践收获

1)通过通过train_test_split 随机把数据集分为训练数据集和测试数据集

#建立训练、测试数据集;一般把原始数据8/2 开

from sklearn.cross_validation import train_test_split

X_train,X_test,y_train,y_test = train_test_split(exam_X,exam_y,train_size=.8)

print('原始数据特征:',exam_X.shape ,

',训练数据特征:', X_train.shape ,

',测试数据特征:',X_test.shape )

print('原始数据标签',exam_y.shape,

'训练数据标签',y_train.shape,

'测试数据标签',y_test.shape)

2)构建逻辑回归模型,只需要3行代码

#第1步:导入逻辑回归

from sklearn.linear_model import LogisticRegression

# 第2步:创建模型:逻辑回归

model = LogisticRegression()

#第3步:训练模型

model.fit(X_train,y_train)

3)用array.reshape()来改变数组的形状,第一个参数代表行数,第二个参数代表列数;假如对一个3*2的数组使用reshape(-1,1),则得到一个6*1的数组;对一个3*2的数组使用reshape(1,-1),则得到一个1*6的数组。

#第0步:输入的数据只有1个特征,需要用array.reshape(-1, 1)来改变数组的形状

X_train = X_train.values.reshape(-1,1)

X_test = X_test.values.reshape(-1,1)

用python做逻辑回归_用Python来实现逻辑回归相关推荐

  1. 用python做自我介绍_用python做个自我介绍(python入门教程)_逻辑教育

    原标题:用python做个自我介绍(python入门教程)_逻辑教育 本文涉及的python基础语法为:数据类型等 数字类型 1. 字符串的拼接 我们在上一章中已经简单介绍了一下字符串的创建方式,这里 ...

  2. python做股票分析_利用Python进行股票投资组合分析(调试)

    pythonsp500-robo-advisor-edition Python for Financial Analyses 需要的镜像文件和数据--Robo Advisor edition. 小结 ...

  3. python做var模型_【Python金融量化】VaR系列(五):Copula模型估计组合VaR

    作者:量化小白H     Python爱好者社区专栏作者 个人公众号:量化小白上分记 前文传送门: 之前总结的大部分模型都是基于正态性的假设,但实际上,正态性假设并不非常符合金融时间序列的特征.如果从 ...

  4. python做淘宝_用python做个淘宝双十一满减攻略,再也不用算算算了

    双十一还有不到10天,购物车已经快加满了,但是钱包里就这么多钱,如何用现有的钱买到更多喜欢的东西,成为我比较头疼的事,因为我已经被各种组合加法搞晕了 于是我决定用python做个双十一购物攻略,把复杂 ...

  5. 使用python做一个闹钟_用python做了个高级闹钟 欢迎借鉴

    原标题:用python做了个高级闹钟 欢迎借鉴 音频文件放入和.py文件同级的目录下 这是简单的闹钟做法,市场上闹钟千千万万,但是自己写出来的闹钟就是不一样,不是小编我无聊,学习乐趣就是这样慢慢培养的 ...

  6. 学会python做什么兼职_学会python能干嘛 学会python可以做哪些兼职?

    学会python可以干什么都希望一段感情会有结果,谁都不希望美好的爱情最后是一场痛,但是如果一开始就想着不在乎天长地久,只在乎曾经拥有"的态度,再美好的感情也不会有好的结果. 从入门级选手到 ...

  7. python做excel宏_利用Python 开发 Excel 宏脚本的神器!

    今天介绍一个叫 xlpython 的库,通过它我们可以用 Python 来开发 Excel 的宏脚本,真正实现在 Excel 中调用 Python. 基本环境 操作系统:Windows 10 x64 ...

  8. 使用python做一个闹钟_用Python写一个简单地闹钟

    一.闹钟程序如下: import sys import string from time import sleep sa = sys.argv lsa = len(sys.argv) if lsa ! ...

  9. python做ui界面_用python编写简单ui界面窗口

    新用户新地理处理,最常见的方法是使用工具对话框执行地理处理操作.当必须执行一次只有一个工具,这个工具对话框确实是一个好方法去经营.地理处理工具易于使用和显示警告图标或错误图标及相关消息旁边不当使用参数 ...

  10. python做游戏代码_利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单!...

    相信许多80,90后都玩过2G时代的文字小游戏,它是来自QQ家园的专属回忆.偷菜,美味小镇,大乐斗,还有精武堂等等,虽然只是文字的输出,但是留给我们这一代的人的印象却是最深刻的.曾经流量很少,响应很快 ...

最新文章

  1. 每天一个linux命令(36):diff 命令
  2. Struts2核心工作原理解析
  3. ubuntu添加dvd光盘源
  4. 【ArcGIS微课1000例】0015:ArcGIS如何创建/自定义快捷键?
  5. C++ char[] 与 string 转换
  6. 【bzoj3514】 Codechef MARCH14 GERALD07加强版
  7. JS对象拷贝:深拷贝和浅拷贝
  8. 【转】JVM内存管理:深入垃圾收集器与内存分配策略
  9. linux向上翻页_Linux下vim编辑器命令大全
  10. 用Free Pascal IDE编写第一个程序Pascal版的hello world
  11. Python基于机器视觉的图像风格迁移
  12. PLSQLDeveloper14连接Oracle11g
  13. PhotoShop 之图层蒙版
  14. “十一“出行防诈骗攻略来了!看完再出去浪
  15. iPhone各种机型尺寸、屏幕分辨率
  16. 计算机d盘可以格式化吗,能将电脑的D盘直接格式化了吗
  17. boot版本是什么 cent os_CentOS下载及版本选择-CentOS LiveCD、LiveDVD和BinDVD区别
  18. 关于Linux的介绍与安装
  19. 学习ofbiz 订单支付设计
  20. 推荐几款优秀的网页聊天工具

热门文章

  1. Android打开/关闭免提(SpeakerPhone)
  2. 每天和琦琦学点新知识_爬虫篇002_Python正则表达式
  3. leetcode 从排序数组中删除重复项(C++)
  4. 流媒体服务器与web客户端插件的配置与搭建(Darwin Streaming server + Quictime plugin)
  5. 【2.5寸SATA固态+硬盘盒】关于移动硬盘不能被识别这件事儿
  6. APAX-5017PG 项目开发全程记录 - 调试篇
  7. ! 初级程序员都能理解的 Kubernetes
  8. csu:1919: 不醉不归
  9. Python 机器学习简单实例:KNN预测鸢尾花分类
  10. vb.net 教程 11-1 打印组件 4 PrintDocument 4