sklearn机器学习 Python代码通用模板

发布于:2025-02-24 ⋅ 阅读:(13) ⋅ 点赞:(0)

以下是一个使用 `scikit-learn`(sklearn)进行机器学习的通用 Python 代码模板。这个模板涵盖了数据加载、预处理、模型训练、评估和预测的基本流程,适用于常见的机器学习任务。

 

```python

# 导入必要的库

import numpy as np

import pandas as pd

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import StandardScaler

from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

from sklearn.ensemble import RandomForestClassifier # 以随机森林为例,可根据任务替换模型

 

# 1. 加载数据

# 假设数据是一个 CSV 文件

data = pd.read_csv('your_dataset.csv')

 

# 2. 数据预处理

# 分离特征和目标变量

X = data.drop('target_column', axis=1) # 替换 'target_column' 为目标列名

y = data['target_column']

 

# 将数据集分为训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

 

# 特征标准化(根据需求选择)

scaler = StandardScaler()

X_train = scaler.fit_transform(X_train)

X_test = scaler.transform(X_test)

 

# 3. 选择并训练模型

model = RandomForestClassifier(random_state=42) # 以随机森林为例,可替换为其他模型

model.fit(X_train, y_train)

 

# 4. 模型评估

# 在测试集上进行预测

y_pred = model.predict(X_test)

 

# 计算准确率

accuracy = accuracy_score(y_test, y_pred)

print(f'模型准确率: {accuracy:.2f}')

 

# 打印分类报告

print("分类报告:")

print(classification_report(y_test, y_pred))

 

# 打印混淆矩阵

print("混淆矩阵:")

print(confusion_matrix(y_test, y_pred))

 

# 5. 模型保存(可选)

import joblib

joblib.dump(model, 'model.pkl') # 保存模型到文件

 

# 6. 加载模型并进行预测(可选)

loaded_model = joblib.load('model.pkl')

new_predictions = loaded_model.predict(X_test) # 对新数据进行预测

```

 

### 关键步骤说明:

1. **数据加载**:从文件(如 CSV)中加载数据。

2. **数据预处理**:

   - 分离特征(`X`)和目标变量(`y`)。

   - 将数据集分为训练集和测试集。

   - 对特征进行标准化或归一化(可选)。

3. **模型训练**:选择模型(如随机森林、逻辑回归等)并训练。

4. **模型评估**:使用测试集评估模型性能,输出准确率、分类报告和混淆矩阵。

5. **模型保存与加载**:将训练好的模型保存到文件,便于后续使用。

 

### 注意事项:

- 根据任务类型(分类、回归、聚类等)选择合适的模型和评估指标。

- 如果数据量较大,可以使用交叉验证(`cross_val_score`)或网格搜索(`GridSearchCV`)优化模型。

- 对于非数值型数据,需要进行编码(如 `OneHotEncoder` 或 `LabelEncoder`)。

在机器学习中,模型选择和调参是提升性能的关键步骤。Python 的 `scikit-learn` 提供了丰富的工具来实现这些任务。以下是一个完整的模型选择和调参的流程,包括交叉验证、网格搜索和随机搜索。

### 1. 导入必要的库
```python
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
from scipy.stats import randint
```

### 2. 加载和预处理数据
```python
# 加载数据
data = pd.read_csv('your_dataset.csv')

# 分离特征和目标变量
X = data.drop('target_column', axis=1)  # 替换 'target_column' 为目标列名
y = data['target_column']

# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
```

### 3. 模型选择
通过交叉验证评估多个模型的性能,选择最佳模型。
```python
# 示例:比较随机森林和支持向量机
from sklearn.svm import SVC

models = {
    'RandomForest': RandomForestClassifier(random_state=42),
    'SVM': SVC(random_state=42)
}

# 交叉验证评估
for name, model in models.items():
    scores = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')
    print(f'{name} 的平均准确率: {np.mean(scores):.2f}')
```

### 4. 超参数调优
#### 4.1 网格搜索(Grid Search)
网格搜索会遍历所有给定的参数组合,找到最优参数。
```python
# 定义参数网格
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10]
}

# 初始化模型
model = RandomForestClassifier(random_state=42)

# 网格搜索
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)

# 输出最佳参数和得分
print(f'最佳参数: {grid_search.best_params_}')
print(f'最佳交叉验证得分: {grid_search.best_score_:.2f}')

# 使用最佳模型进行预测
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
print(f'测试集准确率: {accuracy_score(y_test, y_pred):.2f}')
```

#### 4.2 随机搜索(Random Search)
随机搜索从参数分布中随机采样,适合参数空间较大的情况。
```python
# 定义参数分布
param_dist = {
    'n_estimators': randint(50, 200),
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': randint(2, 11)
}

# 随机搜索
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=10, cv=5, scoring='accuracy', random_state=42)
random_search.fit(X_train, y_train)

# 输出最佳参数和得分
print(f'最佳参数: {random_search.best_params_}')
print(f'最佳交叉验证得分: {random_search.best_score_:.2f}')

# 使用最佳模型进行预测
best_model = random_search.best_estimator_
y_pred = best_model.predict(X_test)
print(f'测试集准确率: {accuracy_score(y_test, y_pred):.2f}')
```

### 5. 模型评估
使用测试集评估最终模型的性能。
```python
# 打印分类报告
print("分类报告:")
print(classification_report(y_test, y_pred))

# 打印混淆矩阵
from sklearn.metrics import confusion_matrix
print("混淆矩阵:")
print(confusion_matrix(y_test, y_pred))
```

### 6. 保存模型
将训练好的模型保存到文件,便于后续使用。
```python
import joblib
joblib.dump(best_model, 'best_model.pkl')
```

### 总结
- **模型选择**:通过交叉验证比较多个模型的性能。
- **调参方法**:
  - 网格搜索(`GridSearchCV`):适合小规模参数空间。
  - 随机搜索(`RandomizedSearchCV`):适合大规模参数空间。
- **模型评估**:使用测试集评估模型性能,输出分类报告和混淆矩阵。
- **模型保存**:将最佳模型保存到文件。

通过以上步骤,可以系统地选择和优化机器学习模型。