模型搭建与评估
模型评估
导包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.display import Image
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.rcParams['figure.figsize'] = (10, 6) # 设置输出图片大小
%matplotlib inline
读入数据集
data = pd.read_csv('clear_data.csv')
切割训练集和测试集
方法:留出法、交叉验证法、自助法
留出法
将数据集分为自变量和因变量
按比例切割训练集和测试集(一般测试集的比例有30%、25%、20%、15%和10%)
使用分层抽样
设置随机种子以便结果能复现
分层抽样优缺点:
优点:在分层抽样中,采用分层比例抽样可以提高样本的代表性,及对总体数量指标的估计值的确定,避免出现简单随机抽样中的集中于某些特性或遗漏掉某些特性。
缺点:调查者必须从每层中抽取独立简单随机样本。
使用流出法:
from sklearn.model_selection import train_test_split
# 一般先取出X和y后再切割,有些情况会使用到未切割的,这时候X和y就可以用,x是清洗好的数据,y是我们要预测的存活数据'Survived'
X = data.iloc[:,1:]
y = train['Survived']
# 对数据集进行切割
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# 查看数据形状
X_train.shape, X_test.shape
逻辑回归
from sklearn.linear_model import LogisticRegression #逻辑回归 逻辑回归不是回归模型而是分类模型
# 默认参数逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, y_train)
# 查看训练集和测试集score值
print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr.score(X_test, y_test)))
为什么线性模型可以进行分类任务,背后是怎么的数学关系
对于多分类问题,线性模型是怎么进行分类的
# 调整参数后的逻辑回归模型
lr2 = LogisticRegression(C=100)
lr2.fit(X_train, y_train)
# 查看训练集和测试集score值
print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr.score(X_test, y_test)))
模型搭建-评估
性能度量指标:
分类问题:精确率、召回率、准确率、F值、ROC-AUC 、混淆矩阵、PRC
回归问题:RMSE(平方根误差)、MAE(平均绝对误差)、MSE(平均平方误差)
聚类问题:兰德指数、互信息、轮廓系数
模型评估是为了知道模型的泛化能力。
交叉验证(cross-validation)是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。
在交叉验证中,数据被多次划分,并且需要训练多个模型。
最常用的交叉验证是 k 折交叉验证(k-fold cross-validation),其中 k 是由用户指定的数字,通常取 5 或 10。