Python Day52 学习(日志Day21复习)

补充:关于“加权模型”

“加权模型”指的是在训练机器学习模型时,对不同类别或样本赋予不同的权重,让模型在学习过程中更加关注某些类别或样本。

常见场景:

  • 当数据集类别不平衡(比如正类很少,负类很多)时,模型容易忽略少数类。
  • 通过给少数类更高的权重,模型在训练时会“更重视”少数类,提高其被正确识别的概率。

举例:
在随机森林、逻辑回归等模型中,可以通过参数 class_weight='balanced' 自动为少数类分配更高权重。

代码实现

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.metrics import recall_score

# 训练集类别统计
import numpy as np
unique, counts = np.unique(y_train, return_counts=True)
print("训练集中各类别数量:", counts)
minority_class = unique[np.argmin(counts)]
majority_class = unique[np.argmax(counts)]
print(f"少数类标签: {minority_class}, 多数类标签: {majority_class}")

# 带权重的随机森林
rf_weighted = RandomForestClassifier(class_weight='balanced', random_state=42)

# 交叉验证
print("开始进行 5 折交叉验证...")
cv_scores = cross_val_score(rf_weighted, X_train, y_train, cv=5, scoring='accuracy')
print(f"\n带权重随机森林 交叉验证平均性能 (基于训练集划分):\n  平均 accuracy: {cv_scores.mean():.4f} (+/- {cv_scores.std():.4f})")

# 在测试集上评估少数类召回率
rf_weighted.fit(X_train, y_train)
y_pred_weighted = rf_weighted.predict(X_test)
recall_weighted = recall_score(y_test, y_pred_weighted, pos_label=minority_class)
print(f"带权重模型: {recall_weighted:.4f}")

代码注解:

  • np.unique(y_train, return_counts=True)统计y_train中每个类别的标签及其出现次数。
  • unique:保存所有不同的类别标签(如[0, 1])。

【.unique() 是 Pandas 和 NumPy 中常用的方法,用于返回某个数组或序列中所有不重复的元素。

  • 在 Pandas 中:
    data['列名'].unique()
    返回该列中所有不同的取值,结果是一个数组。

  • 在 NumPy 中:
    np.unique(array)
    返回数组中所有唯一值,并默认排序。
    用途:常用于查看某一列有多少种类别、去重、统计类别分布等。

  • counts:保存每个类别对应的样本数量(如[4328, 1672])。
  • np.argmin(counts):找到counts中最小值的索引,即样本最少的类别。
  • minority_class:保存少数类的标签。
  • np.argmax(counts):找到counts中最大值的索引,即样本最多的类别。
  • majority_class:保存多数类的标签。
  • class_weight='balanced':自动根据各类别样本数量分配权重,样本少的类别权重高,样本多的类别权重低,帮助模型更关注少数类,缓解类别不平衡问题。
  • cross_val_score 是 sklearn 的交叉验证评分函数。
  • X_train, y_train 是训练数据和标签。
  • cv_scores 保存了每一折的准确率分数(共5个)。
  • recall_score 是 sklearn 的召回率计算函数。
  • pos_label=minority_class 指定“正类”为少数类标签,计算模型对少数类的识别能力。

手写笔记复习(“随机过采样”部分)

今日复习到这里,明日接着复习SMOTE。继续加油!!!@浙大疏锦行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值