7_数据分析—评估

简介: 7_数据分析—评估

一、前期准备


# %matplotlib inline这一句是IPython的魔法函数,可以在IPython编译器里直接使用,作用是内嵌画图,省略掉plt.show()这一步,直接显示图像。
#如果不加这一句的话,我们在画图结束之后需要加上plt.show()才可以显示图像。
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.display import Image
from sklearn.model_selection import train_test_split
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.rcParams['figure.figsize'] = (10, 6)  # 设置输出图片大小

1.1 加载数据并分割数据集

from sklearn.model_selection import train_test_split
# 一般先取出X和y后再切割,有些情况会使用到未切割的,这时候X和y就可以用,x是清洗好的数据,y是我们要预测的存活数据'Survived'
data = pd.read_csv('clear_data.csv')
train = pd.read_csv('train.csv')
X = data
y = train['Survived']
# 对数据集进行切割
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# 默认参数逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, y_train)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                intercept_scaling=1, l1_ratio=None, max_iter=100,
                multi_class='auto', n_jobs=None, penalty='l2',
                random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
                warm_start=False)


二、模型评估


模型评估是为了知道模型的泛化能力。

交叉验证(cross-validation)是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。

在交叉验证中,数据被多次划分,并且需要训练多个模型。

最常用的交叉验证是 k 折交叉验证(k-fold cross-validation),其中 k 是由用户指定的数字,通常取 5 或 10。

准确率(precision)度量的是被预测为正例的样本中有多少是真正的正例

召回率(recall)度量的是正类样本中有多少被预测为正类

f-分数是准确率与召回率的调和平均


2.1 交叉验证


  • 用10折交叉验证来评估之前的逻辑回归模型
  • 计算交叉验证精度的平均值
#提示:交叉验证
Image('Snipaste_2020-01-05_16-37-56.png')
# i=Image.open('Snipaste_2020-01-05_16-37-56.png')
# plt.figure("dd")
# plt.imshow(i)
# plt.show()

65235baeaab3f59bedc044f129f9c496.png


提示:


  • 交叉验证在sklearn中的模块为sklearn.model_selection
from sklearn.model_selection import cross_val_score
lr = LogisticRegression(C=100)
# k折交叉验证分数
scores = cross_val_score(lr, X_train, y_train, cv=10)
print(scores)
"""
array([0.85074627, 0.74626866, 0.74626866, 0.80597015, 0.88059701,
       0.8358209 , 0.76119403, 0.8358209 , 0.74242424, 0.75757576])
"""   
# 平均交叉验证分数
print("Average cross-validation score: {:.2f}".format(scores.mean()))
# Average cross-validation score: 0.80


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


答:K折越多,单次训练验证时,用作训练集的数据就会越多,而用作验证集的数据越少。这样平均的结果会更加可靠,但是所耗费的总时间也会增多。(用大量数据换取结果的可靠,时间增加。)


2.2 混淆矩阵


计算二分类问题的混淆矩阵

计算精确率、召回率以及f-分数


混淆矩阵:又称为可能性表格或是错误矩阵。它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习(非监督学习,通常用匹配矩阵:matching matrix)。其每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容易的表明多个类别是否有混淆(也就是一个class被预测成另一个class)。



b86fcee45c0b0ce470b9606ba42b3940.png提示:


  • 混淆矩阵的方法在sklearn中的sklearn.metrics模块
  • 混淆矩阵需要输入真实标签和预测标签
  • 精确率、召回率以及f-分数可使用classification_report模块


from sklearn.metrics import confusion_matrix
# 训练模型
lr = LogisticRegression(C=100)
lr.fit(X_train, y_train)
# 模型预测结果
pred = lr.predict(X_train)
# 混淆矩阵
confusion_matrix(y_train, pred)
"""
array([[354,  58],
       [ 83, 173]])
"""
from sklearn.metrics import classification_report
# 精确率、召回率以及f1-score
print(classification_report(y_train, pred))


           precision    recall  f1-score   support
        0       0.81      0.86      0.83       412
        1       0.75      0.68      0.71       256
 accuracy                           0.79       668
macro avg       0.78      0.77      0.77       668
weighted avg       0.79      0.79      0.79       668


2.3 ROC曲线


提示:

  • ROC曲线在sklearn中的模块为sklearn.metrics
  • ROC曲线下面所包围的面积越大越好
from sklearn.metrics import roc_curve
# ROC曲线下面所包围的面积越大越好
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)
plt.show()

c3c8ffa00d6f48baa49c4f4d440c3f14.png



目录
相关文章
|
2月前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
117 8
|
4月前
|
机器学习/深度学习 算法 数据挖掘
从零到精通:Scikit-learn在手,数据分析与机器学习模型评估不再难!
【7月更文挑战第25天】在数据科学中,模型评估是理解模型泛化能力的关键。对新手来说,众多评估指标可能令人困惑,但Scikit-learn简化了这一过程。
55 2
|
4月前
|
数据采集 机器学习/深度学习 数据可视化
关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理,进行数据探索,选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。
【7月更文挑战第5天】这是一个关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理(填充缺失值,处理异常值),进行数据探索(可视化和统计分析),选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。此案例展示了数据科学的典型流程。
74 2
|
4月前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
【7月更文挑战第27天】在数据驱动时代,Python以丰富的库成为数据科学首选。Scikit-learn因简洁高效而备受青睐,引领数据分析革命。本文引导您使用Scikit-learn简化机器学习流程。首先通过`pip install scikit-learn`安装库。接着使用内置数据集简化数据准备步骤,例如加载Iris数据集。选择合适的模型,如逻辑回归,并初始化与训练模型。利用交叉验证评估模型性能,获取准确率等指标。最后,应用训练好的模型进行新数据预测。Scikit-learn为各阶段提供一站式支持,助力数据分析项目成功。
68 0
|
机器学习/深度学习 数据建模 数据挖掘
动手学习数据分析(五)——数据建模及模型评估
对分类变量缺失值:填充某个缺失值字符(NA)、用最多类别的进行填充 对连续变量缺失值:填充均值、中位数、众数
190 0
|
数据挖掘
小白学数据分析----->基于数据驱动的最佳渠道评估策略
对于游戏数据分析来说,我们要从很多方面下手,具体从数据分析角度来说,作为游戏CP需要作三块工作,第一是游戏推广,第二是游戏质量,第三是游戏运营,就这三点来看,推广是未来游戏是否有稳定人气,获得稳定收入的关键一环。
1098 0
|
3月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
72 2
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
165 4
|
3月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
79 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析