import pandas as pd from sklearn.tree import DecisionTreeClassifier, export_text import matplotlib.pyplot as plt df=pd.read_csv(r"D:\A-study\aSanXia\shuju\train.csv")#绝对路径 df.head() df = df.drop(['Name','Ticket','Cabin'],axis=1) df.columns from sklearn.preprocessing import LabelEncoder le = LabelEncoder() df_sex = le.fit(df['Sex']) df['Sex']= df_sex.transform(df['Sex']) df = df.dropna( ) df_embarked = le.fit(df['Embarked']) df['Embarked'] = df_embarked.transform(df['Embarked']) df.info() df.head() X = df.loc[:,df.columns!='Survived'] y = df.loc[:,df.columns=='Survived'] from sklearn.model_selection import train_test_split X_tr,X_ts,y_tr,y_ts = train_test_split(X,y) X_tr.shape,X_ts.shape from sklearn.tree import DecisionTreeClassifier dtc = DecisionTreeClassifier() dtc = dtc.fit(X_tr,y_tr) from sklearn.linear_model import LogisticRegression log = LogisticRegression(class_weight='balanced') log.fit(X_tr,y_tr.values.ravel())
时间: 2025-06-25 18:08:19 浏览: 23
### 如何正确使用Pandas进行数据清洗并将其应用于Scikit-learn的决策树和逻辑回归模型
#### 数据清洗与预处理
在数据分析和机器学习项目中,数据清洗是一个至关重要的环节。Pandas 是 Python 中用于数据操作的强大工具之一,能够高效完成各种数据清理任务。
对于泰坦尼克号数据集这样的经典案例,可以按照以下方式执行数据清洗:
1. **加载数据**
首先,使用 Pandas 加载原始数据文件(通常是 CSV 文件)。
```python
import pandas as pd
data = pd.read_csv('titanic.csv')
```
2. **查看基本信息**
查看数据的基本统计信息以及缺失值情况,以便了解需要解决的数据质量问题。
```python
print(data.info())
print(data.describe())
print(data.isnull().sum()) # 显示每列中的缺失值数量
```
3. **填充或删除缺失值**
缺失值通常会影响后续建模过程,因此需要对其进行适当处理。例如,可以用平均值填补数值型变量的缺失值,或者用众数填补类别型变量的缺失值。
```python
data['Age'].fillna(data['Age'].mean(), inplace=True) # 填充 Age 列的缺失值为均值
data['Embarked'].fillna(data['Embarked'].mode()[0], inplace=True) # 填充 Embarked 的缺失值为众数
```
4. **转换类别型变量**
Scikit-learn 的许多算法无法直接处理字符串类型的特征,因此需要将这些特征编码成数值形式。常用的方法包括 `LabelEncoder` 和 `OneHotEncoder`。
```python
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data['Sex'] = le.fit_transform(data['Sex']) # 将 'male' 转换为 1,'female' 转换为 0
```
5. **构建特征矩阵和目标向量**
定义输入特征 (`X`) 和目标变量 (`y`) 并准备进入建模阶段。
```python
X = data[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare']] # 特征选择
y = data['Survived'] # 目标变量
```
---
#### 构建决策树模型
Scikit-learn 提供了一个简单的接口来实现决策树分类器。以下是完整的代码示例:
```python
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建决策树模型
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train) # 训练模型
# 进行预测
y_pred = clf.predict(X_test)
# 输出准确率
print(f"Decision Tree Accuracy: {accuracy_score(y_test, y_pred):.2f}") # 准确率计算
```
此部分展示了如何通过 `train_test_split` 方法分割数据集,并利用 `fit()` 方法训练决策树模型[^1]。
---
#### 构建逻辑回归模型
类似于决策树,逻辑回归也可以轻松集成到工作流中。以下是具体实现步骤:
```python
from sklearn.linear_model import LogisticRegression
# 创建逻辑回归模型
logreg = LogisticRegression(max_iter=1000, random_state=42)
logreg.fit(X_train, y_train) # 训练模型
# 进行预测
y_pred_logreg = logreg.predict(X_test)
# 输出准确率
print(f"Logistic Regression Accuracy: {accuracy_score(y_test, y_pred_logreg):.2f}")
```
在此过程中,`max_iter` 参数被设置为较大的值以确保收敛性[^3]。
---
#### 可视化结果 (可选)
为了更好地理解模型性能,还可以借助 Matplotlib 或 Seaborn 库绘制混淆矩阵或其他评估指标图。
```python
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
cm = confusion_matrix(y_test, y_pred)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=['Not Survived', 'Survived'])
disp.plot(cmap=plt.cm.Blues)
plt.show()
```
以上代码片段展示了一种可视化混淆矩阵的方式,帮助分析模型的表现[^1]。
---
### 总结
通过上述流程可以看出,Pandas 主要负责数据清洗和预处理,而 Scikit-learn 则专注于构建和评估机器学习模型。两者结合使得整个建模过程更加流畅且易于管理。
阅读全文