网站建设需求模板下载青岛官网seo方法
补充:关于“加权模型”
“加权模型”指的是在训练机器学习模型时,对不同类别或样本赋予不同的权重,让模型在学习过程中更加关注某些类别或样本。
常见场景:
- 当数据集类别不平衡(比如正类很少,负类很多)时,模型容易忽略少数类。
- 通过给少数类更高的权重,模型在训练时会“更重视”少数类,提高其被正确识别的概率。
举例:
在随机森林、逻辑回归等模型中,可以通过参数 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。继续加油!!!@浙大疏锦行