You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Random Forest Classifier代码无报错但未输出图表及结果?

代码无输出无报错的排查与修复

以下是针对你代码问题的排查方向和修复方案:

1. 数据加载与有效性检查

  • 确认airlines-corgis.csv文件路径正确,若不在脚本同目录,改用绝对路径。
  • 加载数据后立即验证数据是否正常:
    airline_data = pd.read_csv('airlines-corgis.csv')
    print(airline_data.shape)  # 查看数据行数和列数
    print(airline_data.head()) # 查看前5行数据
    
  • 检查目标列Delayed是否存在、无大量缺失:
    print(airline_data_encoded['Delayed'].info())
    print(airline_data_encoded['Delayed'].value_counts(dropna=False))
    
    如果该列全为NaN或只有单一类别,模型训练和后续输出都会异常。

2. 处理数据缺失与格式问题

  • 你对Time列做了转数值处理但未处理缺失值,这会导致X中存在NaN,影响模型训练:
    # 用中位数填充Time列的缺失值
    airline_data['Time'] = pd.to_numeric(airline_data['Time'], errors='coerce')
    airline_data['Time'] = airline_data['Time'].fillna(airline_data['Time'].median())
    
  • 检查并处理X中的所有缺失值:
    print(X.isnull().sum())
    X = X.fillna(X.mean())  # 用均值填充所有数值型缺失值
    

3. 修复列名空格问题

代码中drop方法里的列名存在多余空格(比如'Delays- NAS'),需修正为匹配数据实际列名:

X = airline_data_encoded.drop(
    ['Delays-Carrier', 'Delays-LateAircraft', 'Delays-NAS', 'Delays-Security', 'Delays-Weather'], 
    axis=1
)

4. 解决matplotlib显示问题

如果在无GUI环境(如服务器、后台脚本)运行,plt.show()无法弹出窗口,改为保存图片到本地:

plt.figure(figsize=(8, 6))
sns.heatmap(cnf_matrix, annot=True, fmt='.2f',
        xticklabels=my_forest.classes_,
        yticklabels=my_forest.classes_)
plt.title('Normalized Confusion Matrix')
plt.xlabel('Predicted Value')
plt.ylabel('True Value')
plt.savefig('confusion_matrix.png')  # 保存图片
plt.show()  # 有GUI环境可保留此句

5. 增加训练过程的验证输出

在关键步骤添加输出,确认流程正常执行:

print('X_train shape:', X_train.shape)
print('y_train distribution:\n', y_train.value_counts())

my_forest.fit(X_train, y_train)
print('模型训练完成')

print('测试集准确率:', metrics.accuracy_score(y_test, y_pred))

修改后的完整代码

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics

# 加载并验证数据
airline_data = pd.read_csv('airlines-corgis.csv')
print('原始数据形状:', airline_data.shape)
print('原始数据前5行:\n', airline_data.head())

airline_data['CarrierNames'] = airline_data['CarrierNames'].str.split(',')
airline_data['TotalCarriers'] = airline_data['CarrierNames'].apply(len)
airline_data = airline_data.explode('CarrierNames')

# 处理Time列缺失值
airline_data['Time'] = pd.to_numeric(airline_data['Time'], errors='coerce')
airline_data['Time'] = airline_data['Time'].fillna(airline_data['Time'].median())

airline_data_encoded = pd.get_dummies(airline_data, columns=['CarrierNames','Code','Name','MonthName'])

# 修正列名空格问题
X = airline_data_encoded.drop(
    ['Delays-Carrier', 'Delays-LateAircraft', 'Delays-NAS', 'Delays-Security', 'Delays-Weather'], 
    axis=1
)
y = airline_data_encoded['Delayed']

# 验证目标列
print('目标列分布:\n', y.value_counts(dropna=False))

# 处理X中的缺失值
X = X.fillna(X.mean())

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=16)
print('训练集形状:', X_train.shape)

my_forest = RandomForestClassifier()
my_forest.fit(X_train, y_train)
print('模型训练完成')

y_pred = my_forest.predict(X_test)
print('测试集准确率:', metrics.accuracy_score(y_test, y_pred))

cnf_matrix = metrics.confusion_matrix(y_test, y_pred, normalize='true')

plt.figure(figsize=(8, 6))
sns.heatmap(cnf_matrix, annot=True, fmt='.2f',
        xticklabels=my_forest.classes_,
        yticklabels=my_forest.classes_)
plt.title('Normalized Confusion Matrix')
plt.xlabel('Predicted Value')
plt.ylabel('True Value')
plt.savefig('confusion_matrix.png')
plt.show()

print('Length of X_train:', len(X_train))
print('Feature Importances:', my_forest.feature_importances_)

内容的提问来源于stack exchange,提问作者Jenay Spence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:15:36