import pandas as pd import numpy as npimport warningswarnings.filterwarnings('ignore')#导入分析库# 数据拆分from sklearn.model_selection import train_test_split# 同分布数据拆分from sklearn.model_selection import StratifiedKFoldimport lightgbm as lgbimport xgboost as xgb1
时间: 2025-03-16 07:05:24 浏览: 107
### 数据处理与模型训练的流程
以下是使用 Pandas、NumPy、Scikit-Learn (sklearn)、LightGBM 和 XGBoost 的具体方法和代码示例:
#### 1. 导入必要的库
在开始之前,需要导入所需的 Python 库来完成数据处理和建模的任务。
```python
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_score
import lightgbm as lgb
import xgboost as xgb
```
上述代码展示了如何导入基本的数据科学工具包以及 LightGBM 和 XGBoost 模型所需的核心模块[^1]。
---
#### 2. 加载和预处理数据
假设有一个 CSV 文件 `data.csv` 需要加载并进行初步探索。
```python
# 加载数据
data = pd.read_csv('data.csv')
# 查看前几行数据
print(data.head())
# 统计缺失值情况
missing_values = data.isnull().sum()
print(missing_values)
# 填充或删除缺失值
data.fillna(method='ffill', inplace=True) # 使用向前填充法填补缺失值
```
通过 Pandas 可以轻松实现数据读取、查看基本信息以及处理缺失值等问题[^3]。
---
#### 3. 特征工程
将数值特征和类别特征分开,并对它们分别进行标准化或编码操作。
```python
# 数值特征提取
numerical_features = [col for col in data.columns if data[col].dtype != 'object']
# 类别特征提取
categorical_features = [col for col in data.columns if data[col].dtype == 'object']
# 对数值特征进行缩放
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data[numerical_features] = scaler.fit_transform(data[numerical_features])
# 对类别特征进行独热编码
data = pd.get_dummies(data, columns=categorical_features)
```
此部分利用了 Scikit-Learn 提供的功能来进行特征转换,从而提高后续算法的表现效果。
---
#### 4. 划分训练集与测试集
为了评估模型性能,通常会把原始数据划分为训练集和验证集两部分。
```python
X = data.drop(columns=['target']) # 替换'target'为目标列名
y = data['target']
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
```
这里采用了 Scikit-Learn 中的函数完成了随机划分工作。
---
#### 5. 构建 LightGBM 模型
下面展示了一个简单的 LightGBM 训练过程。
```python
lgb_train = lgb.Dataset(X_train, label=y_train)
lgb_val = lgb.Dataset(X_val, label=y_val, reference=lgb_train)
params = {
'objective': 'binary',
'metric': 'auc',
'boosting_type': 'gbdt'
}
model_lgb = lgb.train(params, lgb_train, valid_sets=[lgb_train, lgb_val], num_boost_round=100, early_stopping_rounds=10)
```
这段代码定义了一组超参数并通过交叉验证的方式优化了最终的结果[^2]。
---
#### 6. 构建 XGBoost 模型
同样可以构建一个基础版的 XGBoost 模型用于对比分析。
```python
dtrain = xgb.DMatrix(X_train, label=y_train)
dval = xgb.DMatrix(X_val, label=y_val)
param_xgb = {'max_depth': 6, 'eta': 0.1, 'objective': 'binary:logistic'}
num_round = 100
bst = xgb.train(param_xgb, dtrain, num_round, evals=[(dval, 'eval'), (dtrain, 'train')], early_stopping_rounds=10)
```
此处实现了另一个流行的梯度提升框架——XGBoost 的配置方式。
---
#### 7. 性能评估
最后一步是对两个模型的效果做出定量评价。
```python
pred_prob_lgb = model_lgb.predict(X_val)
pred_label_lgb = [round(value) for value in pred_prob_lgb]
accuracy_lgb = accuracy_score(y_val, pred_label_lgb)
roc_auc_lgb = roc_auc_score(y_val, pred_prob_lgb)
print(f"Accuracy of LGB Model: {accuracy_lgb}")
print(f"AUC Score of LGB Model: {roc_auc_lgb}")
pred_prob_xgb = bst.predict(dval)
pred_label_xgb = [int(round(value)) for value in pred_prob_xgb]
accuracy_xgb = accuracy_score(y_val, pred_label_xgb)
roc_auc_xgb = roc_auc_score(y_val, pred_prob_xgb)
print(f"Accuracy of XGB Model: {accuracy_xgb}")
print(f"AUC Score of XGB Model: {roc_auc_xgb}")
```
以上脚本计算出了两种不同方案下的精确率及 ROC-AUC 得分作为衡量标准之一。
---
### 结论
综上所述,整个项目涵盖了从准备阶段到部署环节的关键步骤。每种技术都有各自的优势所在;例如当面对大规模稀疏矩阵时,LightGBM 显得尤为高效。
阅读全文
相关推荐

















