目录
1、score()
作用
用法
参数说明:
返回值:
示例
适用场景
注意事项
与 metrics.accuracy_score 的区别
2、metrics.classification_report()
作用
参数说明:
返回值:
示例
报告内容解析
适用场景
注意事项
3、confusion_matrix()
作用
混淆矩阵的结构
用法
参数说明:
返回值:
示例
二分类题目
多分类题目
适用场景
注意事项
4、cross_val_score()
作用
用法
参数说明:
返回值:
示例
根本用法
指定评估指标
适用场景
注意事项
5、SMOTE().fit_resample()
SMOTE 的原理
用法
参数说明:
返回值:
示例
根本用法
团结分类模型
SMOTE 的参数
适用场景
注意事项
1、score()
lr.score() 是 Scikit-learn 中模型对象(如 LogisticRegression)的一个方法,用于盘算模型在给定数据集上的 正确率(Accuracy)。它适用于分类和回归模型,但在分类使命中,它默认盘算的是分类正确率。
作用
lr.score() 的作用是:
- 评估模型性能:盘算模型在给定数据集上的正确率。
- 快速验证:提供一种简朴的方式验证模型在训练集或测试集上的表现。
用法
参数说明:
- X:特征数据(通常是测试集或训练集的特征部门),形状为 (n_samples, n_features)。
- y:目的值(通常是测试集或训练集的标签部门),形状为 (n_samples,)。
返回值:
返回一个浮点数,表示模型在给定数据集上的正确率。对于分类模型,正确率的盘算公式为:
示例
假设我们有一个训练好的逻辑回归模型 lr,并且有一个测试集 X_test 和对应的标签 y_test,我们可以使用 lr.score() 盘算模型在测试集上的正确率:
- from sklearn.linear_model import LogisticRegression
- from sklearn.model_selection import train_test_split
- from sklearn.datasets import load_iris
- # 加载示例数据集
- data = load_iris()
- X = data.data
- y = data.target
- # 分割数据集为训练集和测试集
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
- # 初始化并训练逻辑回归模型
- lr = LogisticRegression(max_iter=200)
- lr.fit(X_train, y_train)
- # 计算模型在测试集上的准确率
- accuracy = lr.score(X_test, y_test)
- print(f"模型在测试集上的准确率: {accuracy:.2f}")
复制代码
适用场景
- 分类使命:盘算分类正确率。
- 回归使命:盘算 R² 分数(决定系数)。
- 快速验证:在训练或测试过程中,快速评估模型性能。
注意事项
- 分类使命:
- 对于分类模型,lr.score() 默认盘算的是正确率。
- 如果数据集不平衡,正确率可能不是一个可靠的指标,应团结其他指标(如准确率、召回率、F1 分数)进行评估。
- 回归使命:
- 对于回归模型,lr.score() 盘算的是 R² 分数,表示模型对目的变量的表明能力。
- 输入数据:
- X 和 y 的形状必须匹配,X 是特征数据,y 是对应的标签。
与 metrics.accuracy_score 的区别
lr.score() 和 metrics.accuracy_score 都可以用于盘算分类正确率,但它们的用法略有不同:
- lr.score() 是模型对象的方法,直接使用模型和数据集盘算正确率。
- metrics.accuracy_score 是一个独立的函数,须要传入真实标签和猜测标签。
示例对比:
- from sklearn.metrics import accuracy_score
- # 使用 lr.score()
- accuracy1 = lr.score(X_test, y_test)
- # 使用 metrics.accuracy_score
- y_pred = lr.predict(X_test)
- accuracy2 = accuracy_score(y_test, y_pred)
- print(f"lr.score() 准确率: {accuracy1:.2f}")
- print(f"accuracy_score 准确率: {accuracy2:.2f}")
复制代码
两者效果相同,但 lr.score() 更加简洁,适合快速验证模型性能。
2、metrics.classification_report()
metrics.classification_report 是 Scikit-learn 中用于生身分类模型性能报告的函数。它提供了分类使命中常用的评估指标,如 准确率(Precision)、召回率(Recall)、F1 分数(F1-Score) 和 支持数(Support),帮助用户全面了解模型的性能。
单独求召回率、正确率、召回率、F1分数:
metrics.recall_score()
metrics.accuracy_score()
metrics.precision_score()
metrics.f1_score()
作用
classification_report 的主要作用是:
- 评估分类模型的性能:通过盘算准确率、召回率和 F1 分数,评估模型在每一类上的表现。
- 辨认模型的优缺点:帮助用户发现模型在哪些类别上表现较好,哪些类别上表现较差。
- 支持多分类题目:不但适用于二分类题目,也适用于多分类题目。
- from sklearn.metrics import classification_report
- # 生成分类报告
- report = classification_report(y_true, y_pred, target_names=None, digits=2)
- print(report)
复制代码 参数说明:
- y_true:真实的目的值(ground truth),通常是测试集的标签。
- y_pred:模型猜测的目的值,通常是模型对测试集的猜测效果。
- target_names(可选):类别名称的列表。如果提供,报告中将使用这些名称代替类别编号。例如,target_names=['Class 0', 'Class 1']。
- digits(可选):控制输出报告中数值的小数位数,默以为 2。
返回值:
返回一个字符串形式的分类报告,包罗以下内容:
- 准确率(Precision):猜测为正类的样本中,实际为正类的比例。公式:Precision = TP / (TP + FP)。
- 召回率(Recall):实际为正类的样本中,猜测为正类的比例。公式:Recall = TP / (TP + FN)。
- F1 分数(F1-Score):准确率和召回率的调和平均值。公式:F1 = 2 * (Precision * Recall) / (Precision + Recall)。
- 支持数(Support):每个类别的样本数目。
示例
假设我们有一个二分类题目,真实标签和猜测标签如下:
- y_true = [0, 1, 1, 0, 1, 0, 1, 0]
- y_pred = [0, 1, 0, 0, 1, 1, 1, 0]
复制代码 使用 classification_report 天生报告:
- from sklearn.metrics import classification_report
- report = classification_report(y_true, y_pred, target_names=['Class 0', 'Class 1'])
- print(report)
复制代码 输出效果:
- precision recall f1-score support
- Class 0 0.67 0.67 0.67 3
- Class 1 0.75 0.75 0.75 4
- accuracy 0.71 7
- macro avg 0.71 0.71 0.71 7
- weighted avg 0.71 0.71 0.71 7
复制代码 报告内容解析
- 类别指标:
- 每一行对应一个类别的评估效果。
- precision、recall、f1-score 分别表示该类别的准确率、召回率和 F1 分数。
- support 表示该类别的样本数目。
- 团体指标:
- accuracy:模型的团体正确率,即准确猜测的样本占总样本的比例。
- macro avg:全部类别的指标(准确率、召回率、F1 分数)的算术平均值。
- weighted avg:全部类别的加权平均值,权重为每个类别的支持数。
适用场景
- 二分类题目:评估正类和负类的表现。
- 多分类题目:评估每个类别的表现。
- 不平衡数据集:通过准确率、召回率和 F1 分数,更好地评估模型在不平衡数据上的性能。
注意事项
- 对于不平衡数据集,accuracy 可能不是一个可靠的指标,应重点关注 precision、recall 和 f1-score。
- 如果类别较多,可以指定 target_names 以便更清楚地明白报告。
通过 classification_report,用户可以快速了解模型的性能,并针对性地优化模型。
3、confusion_matrix()
confusion_matrix() 是 Scikit-learn 中用于盘算分类模型混淆矩阵的函数。混淆矩阵是评估分类模型性能的告急工具,它展示了模型猜测效果与真实标签之间的对比情况,特别适用于二分类和多分类题目。
作用
混淆矩阵的主要作用是:
- 可视化分类模型的性能:展示模型在每个类别上的猜测情况。
- 辨认分类错误:帮助分析模型在哪些类别上容易堕落。
- 盘算其他指标:基于混淆矩阵,可以盘算准确率、召回率、F1 分数等指标。
混淆矩阵的结构
对于一个二分类题目,混淆矩阵的结构如下:
猜测为负类 (0)猜测为正类 (1)实际为负类 (0)TN (True Negative)FP (False Positive)实际为正类 (1)FN (False Negative)TP (True Positive)
- TN (True Negative):实际为负类,猜测为负类。
- FP (False Positive):实际为负类,猜测为正类(误报)。
- FN (False Negative):实际为正类,猜测为负类(漏报)。
- TP (True Positive):实际为正类,猜测为正类。
对于多分类题目,混淆矩阵的行表示实际类别,列表示猜测类别。
用法
- from sklearn.metrics import confusion_matrix
- # 计算混淆矩阵
- cm = confusion_matrix(y_true, y_pred)
复制代码 参数说明:
- y_true:真实的目的值(ground truth),通常是测试集的标签。
- y_pred:模型猜测的目的值,通常是模型对测试集的猜测效果。
- labels(可选):指定类别的次序。默认情况下,类别按照 y_true 和 y_pred 中出现的次序排列。
- sample_weight(可选):样本权重。
返回值:
返回一个二维数组(矩阵),表示混淆矩阵。矩阵的行表示实际类别,列表示猜测类别。
示例
二分类题目
- from sklearn.metrics import confusion_matrixy_true = [0, 1, 1, 0, 1, 0, 1, 0]
- y_pred = [0, 1, 0, 0, 1, 1, 1, 0]cm = confusion_matrix(y_true, y_pred)print("混淆矩阵:")print(cm)
复制代码 解析:
- 实际为负类 (0) 的样本中,2 个被准确猜测为负类 (TN),1 个被错误猜测为正类 (FP)。
- 实际为正类 (1) 的样本中,1 个被错误猜测为负类 (FN),4 个被准确猜测为正类 (TP)。
多分类题目
- from sklearn.metrics import confusion_matrix
- y_true = [0, 1, 2, 0, 1, 2, 0, 1, 2]
- y_pred = [0, 1, 1, 0, 2, 2, 0, 1, 2]
- cm = confusion_matrix(y_true, y_pred)
- print("混淆矩阵:")
- print(cm)
复制代码 输出效果:
- 混淆矩阵:
- [[3 0 0]
- [0 2 1]
- [0 1 2]]
复制代码 解析:
- 类别 0:3 个样本全部准确猜测。
- 类别 1:2 个样本准确猜测,1 个样本被错误猜测为类别 2。
- 类别 2:2 个样本准确猜测,1 个样本被错误猜测为类别 1。
适用场景
- 二分类题目:分析模型在正类和负类上的表现。
- 多分类题目:分析模型在每个类别上的表现。
- 不平衡数据集:通过混淆矩阵辨认模型在少数类上的表现。
注意事项
- 类别次序:默认情况下,混淆矩阵的类别次序按照 y_true 和 y_pred 中出现的次序排列。如果须要指定次序,可以使用 labels 参数。
- 多分类题目:对于多分类题目,混淆矩阵的行表示实际类别,列表示猜测类别。
- 团结其他指标:混淆矩阵通常与其他指标(如准确率、召回率、F1 分数)团结使用,全面评估模型性能。
通过 confusion_matrix(),用户可以直观地了解模型的分类性能,并针对性地优化模型。
4、cross_val_score()
cross_val_score() 是 Scikit-learn 中用于实验交叉验证的函数。它通过将数据集分别为多个子集,多次训练和验证模型,从而更可靠地评估模型的性能。交叉验证特别适用于数据量较小的情况,因为它可以充实利用数据,镌汰模型评估的方差。
作用
cross_val_score() 的主要作用是:
- 评估模型性能:通过交叉验证盘算模型的性能指标(如正确率、F1 分数等)。
- 镌汰过拟合风险:通过多次验证,确保模型的性能评估更加稳健。
- 选择最佳模型:比较不同模型或参数的性能,选择最优模型。
用法
- from sklearn.model_selection import cross_val_score
- # 执行交叉验证
- scores = cross_val_score(estimator, X, y, cv=None, scoring=None)
复制代码 参数说明:
- estimator:须要评估的模型对象(如 LogisticRegression、RandomForestClassifier 等)。
- X:特征数据,形状为 (n_samples, n_features)。
- y:目的值,形状为 (n_samples,)。
- cv:交叉验证的折数或交叉验证策略。默认值为 None,表示使用 5 折交叉验证。
- 如果是整数,表示折数(如 cv=5)。
- 如果是交叉验证对象(如 KFold、StratifiedKFold),则使用指定的交叉验证策略。
- scoring:评估指标。默认值为 None,表示使用模型的默认评估指标(如分类模型使用正确率,回归模型使用 R² 分数)。
- 可以是字符串(如 'accuracy'、'f1'、'roc_auc')。
- 也可以是自定义的评分函数。
返回值:
返回一个数组,包罗每一折交叉验证的评分效果。
示例
根本用法
- from sklearn.datasets import load_iris
- from sklearn.linear_model import LogisticRegression
- from sklearn.model_selection import cross_val_score
- # 加载数据集
- data = load_iris()
- X = data.data
- y = data.target
- # 初始化模型
- model = LogisticRegression(max_iter=200)
- # 执行 5 折交叉验证,使用默认评估指标(准确率)
- scores = cross_val_score(model, X, y, cv=5)
- print("交叉验证得分:", scores)
- print("平均得分:", scores.mean())
复制代码 输出效果:
- 交叉验证得分: [1. 0.96666667 0.93333333 0.96666667 1. ]
- 平均得分: 0.9733333333333334
复制代码 解析:
- 每一折交叉验证的得分分别为 [1.0, 0.9667, 0.9333, 0.9667, 1.0]。
- 平均得分为 0.9733。
指定评估指标
- # 执行 5 折交叉验证,使用 F1 分数作为评估指标
- scores = cross_val_score(model, X, y, cv=5, scoring='f1_macro')
- print("交叉验证 F1 得分:", scores)
- print("平均 F1 得分:", scores.mean())
复制代码 输出效果:
- 交叉验证 F1 得分: [1. 0.96658312 0.93265993 0.96658312 1. ]
- 平均 F1 得分: 0.9731652331652332
复制代码 适用场景
- 模型评估:评估模型在数据集上的性能。
- 参数调优:团结 GridSearchCV 或 RandomizedSearchCV 进行超参数调优。
- 模型选择:比较不同模型或算法的性能。
注意事项
- 数据分别:
- 对于分类题目,建议使用分层交叉验证(如 StratifiedKFold),以确保每一折的类别分布与团体数据一致。
- 对于回归题目,可以使用普通的 K 折交叉验证(如 KFold)。
- 评估指标:
- 默认情况下,分类模型使用正确率,回归模型使用 R² 分数。
- 可以通过 scoring 参数指定其他评估指标(如 'f1'、'roc_auc'、'neg_mean_squared_error')。
- 盘算开销:
- 交叉验证须要多次训练和验证模型,盘算开销较大,尤其适用于数据量较小的情况。
5、SMOTE().fit_resample()
SMOTE().fit_resample() 是 Imbalanced-learn 库中用于处置惩罚类别不平衡题目的一种方法。SMOTE(Synthetic Minority Oversampling Technique,合成少数类过采样技术)通过天生新的少数类样本来平衡数据集,从而改善模型在少数类上的表现。
SMOTE 的原理
SMOTE 的核心头脑是通过插值天生新的少数类样本。具体步骤如下:
- 对于每个少数类样本,找到其 k 个近来邻的少数类样本。
- 在这些近来邻样本中随机选择一个样本。
- 在原始样本和选择的近来邻样本之间天生一个新的样本。
通过这种方式,SMOTE 可以天生多样化的少数类样本,而不但仅是简朴地复制现有样本。
用法
- from imblearn.over_sampling import SMOTE
- # 初始化 SMOTE 过采样器
- smote = SMOTE(random_state=42)
- # 对数据集进行过采样
- X_resampled, y_resampled = smote.fit_resample(X, y)
复制代码 参数说明:
- X:特征数据,形状为 (n_samples, n_features)。
- y:目的值,形状为 (n_samples,)。
返回值:
返回过采样后的特征数据和目的值:
- X_resampled:过采样后的特征数据。
- y_resampled:过采样后的目的值。
示例
根本用法
- from imblearn.over_sampling import SMOTE
- from collections import Counter
- # 示例数据
- X = [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
- y = [0, 0, 0, 1, 1] # 类别 0 有 3 个样本,类别 1 有 2 个样本
- # 初始化 SMOTE 过采样器
- smote = SMOTE(random_state=42)
- # 对数据集进行过采样
- X_resampled, y_resampled = smote.fit_resample(X, y)
- print("过采样后的类别分布:", Counter(y_resampled))
- print("过采样后的特征数据:")
- print(X_resampled)
- print("过采样后的目标值:")
- print(y_resampled)
复制代码 输出效果:
- 过采样后的类别分布: Counter({0: 3, 1: 3})
- 过采样后的特征数据:
- [[1. 2. ]
- [2. 3. ]
- [3. 4. ]
- [4. 5. ]
- [5. 6. ]
- [3.5 4.5]]
- 过采样后的目标值:
- [0 0 0 1 1 1]
复制代码 解析:
- 类别 0 有 3 个样本,类别 1 有 2 个样本。
- SMOTE 天生一个新的少数类样本 [3.5, 4.5],使两个类别的样本数目均为 3。
团结分类模型
以下是一个完整的示例,展示怎样使用 SMOTE 处置惩罚类别不平衡题目,并训练分类模型:
- from sklearn.datasets import make_classification
- from sklearn.model_selection import train_test_split
- from sklearn.linear_model import LogisticRegression
- from sklearn.metrics import classification_report
- from imblearn.over_sampling import SMOTE
- # 生成不平衡数据集
- X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=42)
- # 分割数据集为训练集和测试集
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
- # 初始化 SMOTE 过采样器
- smote = SMOTE(random_state=42)
- # 对训练集进行过采样
- X_train_resampled, y_train_resampled = smote.fit_resample(X_train, y_train)
- # 初始化并训练逻辑回归模型
- model = LogisticRegression(max_iter=1000)
- model.fit(X_train_resampled, y_train_resampled)
- # 预测测试集
- y_pred = model.predict(X_test)
- # 输出分类报告
- print("分类报告:\n", classification_report(y_test, y_pred))
复制代码 SMOTE 的参数
SMOTE 的常用参数包括:
- sampling_strategy:指定过采样的策略。
- 'auto':默认值,对全部少数类进行过采样。
- 'minority':仅对少数类进行过采样。
- float:指定少数类样本的目的比例。
- dict:指定每个类别的目的样本数目。
- k_neighbors:用于天生新样本的近来邻数目,默以为 5。
- random_state:随机种子,用于控制随机性。
示例:
- smote = SMOTE(sampling_strategy='minority', k_neighbors=3, random_state=42)
复制代码 适用场景
- 类别不平衡题目:当数据会合某些类别的样本数目远少于其他类别时。
- 提高少数类辨认能力:如欺诈检测、疾病诊断等使命。
- 数据加强:通过天生新样本,增加数据集的多样性。
注意事项
- 高维数据:
- SMOTE 在高维数据上可能效果不佳,因为高维空间中样本之间的距离变得不显著。
- 噪声数据:
- 如果少数类样本中存在噪声,SMOTE 可能会天生不公道的样本。
- 盘算开销:
- SMOTE 的盘算开销较大,尤其适用于大规模数据集。
通过 SMOTE().fit_resample(),用户可以有效地处置惩罚类别不平衡题目,并提高模型在少数类上的表现。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |