# 数据集特征分析相关库import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 数据集预处理相关库from sklearn.preprocessing import StandardScalerfrom sklearn.model_selection import train_test_split# K近邻算法相关库from sklearn.neighbors import KNeighborsClassifierfrom sklearn.model_selection import cross_val_scorefrom sklearn.metrics import precision_score,recall_score,f1_scorefrom sklearn.metrics import precision_recall_curve,roc_curve,average_precision_score,auc# 决策树相关库from sklearn.tree import DecisionTreeClassifier# 随机森林相关库from sklearn.ensemble import RandomForestClassifier# 逻辑回归相关库from sklearn.linear_model import LogisticRegression# SGD分类相关库from sklearn.linear_model import SGDClassifier
时间: 2025-04-03 21:05:44 浏览: 52
### 数据集特征分析与模型训练
#### 特征分析工具:Pandas、Matplotlib 和 Seaborn
数据分析通常从加载数据并探索其结构开始。`pandas` 是用于数据操作和清洗的强大库,能够轻松读取 CSV 文件或其他格式的数据,并提供灵活的 DataFrame 结构[^1]。
```python
import pandas as pd
# 加载数据
data = pd.read_csv('dataset.csv')
# 查看前几行数据
print(data.head())
# 描述统计量
print(data.describe())
```
为了可视化数据分布和关系,可以使用 `matplotlib` 和 `seaborn` 库。以下是几种常见的图表:
- **折线图** 可以展示时间序列的变化趋势。
- **散点图** 适合观察两个变量之间的关系。
- **柱状图** 能够比较不同类别的数量或比例。
- **直方图** 展现单个数值型变量的频率分布。
- **箱线图** 提供关于异常值的信息以及四分位数范围。
```python
import matplotlib.pyplot as plt
import seaborn as sns
# 设置画布大小
plt.figure(figsize=(8, 6))
# 绘制散点图
sns.scatterplot(x='feature_1', y='target', data=data)
# 添加标题
plt.title("Feature vs Target")
# 显示图像
plt.show()
```
#### 模型训练流程:Sklearn 实现 KNN、决策树、随机森林、逻辑回归和 SGD 分类器
##### 数据准备
在建模之前,需要对数据进行必要的预处理,比如缺失值填充、标准化/归一化等。这可以通过 `sklearn.preprocessing` 完成。
```python
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X = data.drop(columns=['target'])
y = data['target']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 标准化特征
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
```
##### 训练多种算法
下面分别介绍了几个常用监督学习算法的应用实例。
###### K近邻 (K-Nearest Neighbors)
KNN 方法简单易懂,适用于小型到中型规模的数据集。
```python
from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier(n_neighbors=5)
knn_clf.fit(X_train_scaled, y_train)
```
###### 决策树 (Decision Tree)
决策树易于解释,但容易过拟合复杂数据。
```python
from sklearn.tree import DecisionTreeClassifier
tree_clf = DecisionTreeClassifier(max_depth=3)
tree_clf.fit(X_train_scaled, y_train)
```
###### 随机森林 (Random Forest)
随机森林通过组合多个决策树提高泛化能力。
```python
from sklearn.ensemble import RandomForestClassifier
rf_clf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
rf_clf.fit(X_train_scaled, y_train)
```
###### 逻辑回归 (Logistic Regression)
逻辑回归主要用于解决二分类问题。
```python
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(solver='liblinear')
log_reg.fit(X_train_scaled, y_train)
```
###### 随机梯度下降分类器 (Stochastic Gradient Descent Classifier)
SGD 支持大规模稀疏数据上的高效优化。
```python
from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier(loss="hinge", penalty="l2", max_iter=1000, tol=1e-3, random_state=42)
sgd_clf.fit(X_train_scaled, y_train)
```
#### 性能评估
利用交叉验证技术可更可靠地估计模型性能指标如准确率、召回率、F1分数等。
```python
from sklearn.metrics import accuracy_score, classification_report
for model_name, clf in [('KNN', knn_clf), ('DT', tree_clf), ('RF', rf_clf), ('LR', log_reg), ('SGD', sgd_clf)]:
predictions = clf.predict(X_test_scaled)
acc = accuracy_score(y_test, predictions)
report = classification_report(y_test, predictions)
print(f"{model_name} Accuracy: {acc:.4f}")
print(report)
```
#### ROC 曲线绘制
借助 `scikitplot` 或者手动调用 `roc_curve` 函数生成接收者操作特性曲线。
```python
import numpy as np
import scikitplot as skplt
probas_list = []
labels = ['KNN', 'DT', 'RF', 'LR', 'SGD']
models = [knn_clf, tree_clf, rf_clf, log_reg, sgd_clf]
for i, m in enumerate(models):
probas = m.predict_proba(X_test_scaled)[:, 1].reshape(-1, 1)
probas_list.append(probas)
all_probas = np.hstack(probas_list)
skplt.metrics.plot_roc(y_test, all_probas, plot_micro=False, figsize=(7, 7))
plt.legend(labels)
plt.show()
```
阅读全文
相关推荐


















