如何使用Sklearn.KFold和Split,生成训练和验证集?

使用Sklearn 进行K折交叉验证,代码咋写呢

开始正文

  1. 先导入需要的库
import pandas as pd
import numpy as np
from sklearn.model_selection import KFold
  1. 读入数据,可以用 pd.read_csv(‘路径名’)。这里就假设数据。假设有5个训练样本x,各对应着一个标签y.
    下面代码的y_train是numpy.ndarray 类型,为了使用列表进行索引方便。
y_train = np.array([1,0
这段代码展示了如何使用 `scikit-learn` 库构建、训练评估一个逻辑回归分类模型。下面是详细的步骤说明以及每个部分的作用: ### 1. 导入必要的库 ```python from sklearn.linear_model import LogisticRegression from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score ``` **解释:** - **`LogisticRegression`**: 用于创建逻辑回归分类器。 - **`make_classification`**: 函数用来生成合成的分类数据集,方便快速原型设计测试算法性能。 - **`train_test_split`**: 将原始数据划分为训练验证(或测试)集的功能函数。 - **`accuracy_score`**: 计算预测结果相对于真实标签的准确度得分。 ### 2. 数据准备 - 合成示例数据 ```python X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=0, random_state=42) ``` **参数解析:** - **`n_samples`**: 总样本数,这里是1000个样例。 - **`n_features`**: 每条记录包含多少特征值,即维度大小为10维空间中的点。 - **`n_informative`**: 对于目标变量具有区分性的有效特征数目为5个。 - **`n_redundant`**: 不含多余无意义的信息列数量设置为零。 - **`random_state`**: 设置随机种子保证每次运行得到相同的结果便于复现实验过程。 ### 3. 数据分割 - 构建训练集与测试集 ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` **关键点:** - 测试集中保留了原总数据量的20% (`test_size=0.2`) ,其余作为训练用途; - 继续沿用相同的随机状态(`random_state=42`)确保划分一致性; ### 4. 创建并初始化逻辑回归模型实例 ```python model = LogisticRegression() ``` 这里我们直接调用了默认构造方法来建立一个新的逻辑回归分类器对象。 ### 5. 训练阶段 - 学习模式规律 ```python model.fit(X_train, y_train) ``` 将预处理后的输入矩阵 `X_train` 对应的类别标记向量 `y_train` 提供给模型去“学习”。 ### 6. 推理阶段 - 得出未知样本的输出猜测 ```python y_pred = model.predict(X_test) ``` 基于之前的训练成果对未曾见过的新批次观测值做出响应式判定。 ### 7. 结果评价 - 衡量预测质量 ```python accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy}") ``` 利用实际答案 `y_test` 跟机器推论出来的估计 `y_pred` 相比较从而计算总体上的平均正确比例。 --- #### 注意事项及优化建议: - **交叉验证(Cross Validation)** : 单次拆分可能导致运气成分影响评测准确性,因此可引入K折交验机制增加稳健性。 - **超参调整(Hyperparameter Tuning)** :比如正则化强度C的选择等,可通过网格搜索(Grid Search)找到最优配置。 - **更多指标(More Metrics)** :除了精度外还可以关注召回率(recall),F1分数(F1-score), AUC曲线面积(AUROC)等等全面考察模型表现优劣。 --- #### 示例改进版本: 加入简单的交叉验证以提高可靠性,并打印更多信息辅助理解整个流程: ```python import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.datasets import make_classification from sklearn.model_selection import cross_val_score, StratifiedKFold from sklearn.metrics import classification_report # ... [省略前面不变的部分] ... kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42) scores = cross_val_score(model, X_train, y_train, cv=kfold, scoring="accuracy") print("Cross-validation scores:", scores) print(f"Average CV Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) # 最终在全部训练好的基础上再做一次完整预测并报告详细统计信息 final_predictions = model.predict(X_test) report = classification_report(y_test, final_predictions) print(report) ``` 上述代码不仅提供了更稳定的性能测量手段(通过多次循环取均值得到更加可信的评分范围),还增加了丰富的评估内容帮助诊断潜在弱点所在之处。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值