首页 > 其他分享 >动手学数据分析 -- Task03-评估

动手学数据分析 -- Task03-评估

时间:2023-01-31 22:23:53浏览次数:49  
标签:数据分析 plt -- ROC 写入 train import Task03 sklearn

第三章 模型搭建和评估-评估

根据之前的模型的建模,我们知道如何运用sklearn这个库来完成建模,以及我们知道了的数据集的划分等等操作。那么一个模型我们怎么知道它好不好用呢?以至于我们能不能放心的使用模型给我的结果呢?那么今天的学习的评估,就会很有帮助。
加载下面的库

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from IPython.display import Image
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.rcParams['figure.figsize'] = (10, 6)  # 设置输出图片大小

任务:加载数据并分割测试集和训练集

#写入代码
clear_data = pd.read_csv('clear_data.csv')
train = pd.read_csv('train.csv')
#写入代码
clear_data
### 模型评估
#写入代码
train
  • 模型评估是为了知道模型的泛化能力。
  • 交叉验证(cross-validation)是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。
  • 在交叉验证中,数据被多次划分,并且需要训练多个模型。
  • 最常用的交叉验证是 k 折交叉验证(k-fold cross-validation),其中 k 是由用户指定的数字,通常取 5 或 10。
  • 准确率(precision)度量的是被预测为正例的样本中有多少是真正的正例
  • 召回率(recall)度量的是正类样本中有多少被预测为正类
  • f-分数是准确率与召回率的调和平均
    【思考】:将上面的概念进一步的理解,大家可以做一下总结

思考回答:

from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split

任务一:交叉验证

  • 用10折交叉验证来评估之前的逻辑回归模型
  • 计算交叉验证精度的平均值

提示:交叉验证

提示4

  • 交叉验证在sklearn中的模块为sklearn.model_selection
#写入代码
x = clear_data            # 自变量
y = train['Survived']     # 因变量
x_train, x_test, y_train, y_test = train_test_split(x, y, stratify=y, random_state=0)
lr = LogisticRegression(C=100)
#写入代码
scores = cross_val_score(lr, x_train, y_train, cv=10)
scores
#写入代码
# 平均交叉验证分数
print('Average cross-validation score ' + str(scores.mean()))

思考4

  • k折越多的情况下会带来什么样的影响?

思考回答

一般而言,k折越多,评价结果的稳定性和保真性越高,不过整个计算复杂度越高。一种特殊的情况是k=m,m为数据集样本格式,这种特里成为留一法,结果往往比较准确

任务二:混淆矩阵

  • 计算二分类问题的混淆矩阵
  • 计算精确率、召回率以及f-分数
    【思考】什么是二分类问题的混淆矩阵,理解这个概念,知道它主要是运算到什么任务中的

思考回答

混淆矩阵是一个二维方阵,它主要用于评估二分类问题的好坏

提示:混淆矩阵

提示:准确率 (Accuracy),精确度(Precision),Recall,f-分数计算方法

提示5

  • 混淆矩阵的方法在sklearn中的sklearn.metrics模块
  • 混淆矩阵需要输入真实标签和预测标签
  • 精确率、召回率以及f-分数可使用classification_report模块
#写入代码
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
#写入代码
lr = LogisticRegression(C=100)
lr.fit(x_train, y_train)
#写入代码
pred = lr.predict(x_train)
confusion_matrix(y_train, pred)
#写入代码
print(confusion_matrix(y_train, pred))

【思考】

  • 如果自己实现混淆矩阵的时候该注意什么问题

思考回答

不要混淆

任务三:ROC曲线

  • 绘制ROC曲线
    【思考】什么是ROC曲线,ROC曲线的存在是为了解决什么问题?

思考

ROC曲线描述的是分类器性能随着分类器阈值的变化而变化的过程。对于ROC曲线,一个重要的特征是它的面积,面积为0.5为随机分类,识别能力为0,面积越接近于1识别能力越强

提示6

  • ROC曲线在sklearn中的模块为sklearn.metrics
  • ROC曲线下面所包围的面积越大越好
#写入代码
from sklearn.metrics import roc_curve
#写入代码
fpr, tpr, thresholds = roc_curve(y_test, lr.decision_function(x_test))
plt.plot(fpr, tpr, label="ROC Curve")
plt.xlabel("FPR")
plt.ylabel("TPR (recall)")
# 找到最接近于0的阈值
close_zero = np.argmin(np.abs(thresholds))
plt.plot(fpr[close_zero], tpr[close_zero], 'o', markersize=10, label="threshold zero", fillstyle="none", c='k', mew=2)
plt.legend(loc=4)

思考6

  • 对于多分类问题如何绘制ROC曲线

思考回答

# 多分类的ROC曲线的画法其实就是画出各个类别的ROC曲线,然后进行平均

标签:数据分析,plt,--,ROC,写入,train,import,Task03,sklearn
From: https://www.cnblogs.com/horolee/p/Task03-02.html

相关文章

  • Metasploit2通关教程
    Metasploitable2靶机介绍:Metasploitable2虚拟系统是一个特别制作的ubuntu操作系统,本身设计作为安全工具测试和演示常见漏洞攻击。这个版本的虚拟系统兼容VMware。当虚......
  • Java阿姆斯壮数(armstrongnumber) 实例
    Java中的阿姆斯壮数(armstrongnumber)定义:阿姆斯壮数(armstrongnumber)是等于其数字的立方数之和的数字,例如:0,1,153,370,371,407等。现在试着理解为什么153是一个阿姆斯壮数......
  • Java阶乘实例
    Java中的阶乘程序:n的阶乘是所有正整数的乘积。n的因子由n!来表示。例如:4!=4*3*2*1=245!=5*4*3*2*1=120Java这里,4!发音为“4的阶乘”。阶乘通常用于组......
  • Java插入排序
    下面我们创建一个java程序,实现使用插入排序对数组元素进行排序。插入排序对于小元素是有好处的,因为排序大量元素它需要更多的时间。让我们来看看一个简单的java程序,使......
  • Java选择排序
    在这个示例中,我们创建一个java程序,实现使用选择排序对数组元素进行排序。在选择排序算法中,搜索最低的元素并将其排列到适当的位置。用下一个最小的数字交换当前元素。......
  • 如果我让你查回文你还爱我吗
    [如果我让你查回文你还爱我吗]思路对中心进行划分,这样子就只需要考虑一边就可以了然后用树状数组或线段树对差分数组进行维护代码#include<bits/stdc++.h>usingnam......
  • Java气泡排序
    在教程中,将创建一个java程序,使用冒泡排序对数组元素排序。气泡排序算法也被称为最简单的排序算法。在冒泡排序算法中,数组从第一个元素遍历到最后一个元素。这里,将当前......
  • MATLAB环境中CVX安装外部Mosek求解器
    MATLAB环境在CVX安装外部Mosek求解器记录1.引言2.软件准备3.软件安装3.1.Mosek安装3.2.CVX安装4.卸载与更新1.引言在使用MATLAB环境的CVX求解优化问题......
  • 工厂模式(factory)
    1,简单工厂模式1.1,简介简单工厂:封装创建产品的过程。提供一个返回产品实例的方法,此方法封装了产品实例的逻辑,根据参数返回不同的实例。所有产品一个工厂实例生成。缺点:每......
  • CUDA C++ / 错误处理
    错误处理接收错误信息定义一个cudaError_t类型的变量来接收错误信息cudaError_terr;获取错误信息的字符串cudaGetErrorString(err);使用方法:cout<<cudaGetErrorStr......