决策树空气分析

本文介绍了一个使用决策树分类器预测空气质量等级的数据科学项目。通过对原始数据进行预处理,并将其转换为数值形式,然后利用 sklearn 库中的 DecisionTreeClassifier 进行模型训练及评估。

数据处理

# -*- coding: utf-8 -*-
"""
Created on Mon Apr 24 16:29:07 2017

@author: Administrator
"""

import pandas as pd

inputfile = 'F:/data/chapter9/demo/data/consider.xls' #数据文件
outputfile= 'F:/data/chapter9/demo/data/consider_o.xls'
data=pd.read_excel(inputfile)
'''
for i in range(data['空气等级'].size):
    if data['空气等级'][i]=='I':
        data['空气等级'][i]=1
    elif data['空气等级'][i]=='II':
        data['空气等级'][i]=2
    elif data['空气等级'][i]=='III':
        data['空气等级'][i]=3
    elif data['空气等级'][i]=='IV':
        data['空气等级'][i]=4
    elif data['空气等级'][i]=='V':
        data['空气等级'][i]=5
    elif data['空气等级'][i]=='VI':
        data['空气等级'][i]=6
    elif data['空气等级'][i]=='VII':
        data['空气等级'][i]=7
'''
data['空气等级'][data['空气等级']=='I']=1
data['空气等级'][data['空气等级']=='II']=2
data['空气等级'][data['空气等级']=='III']=3
data['空气等级'][data['空气等级']=='IV']=4
data['空气等级'][data['空气等级']=='V']=5
data['空气等级'][data['空气等级']=='VI']=6
data['空气等级'][data['空气等级']=='VII']=7

data.to_excel(outputfile)

模型训练

# -*- coding: utf-8 -*-
"""
Created on Mon Apr 24 16:58:23 2017

@author: Administrator
"""

#-*- coding: utf-8 -*-
import pandas as pd
from sklearn.tree import DecisionTreeClassifier as DTC

inputfile = 'F:/data/chapter9/demo/data/consider_o.xls' #数据文件
outputfile1 = 'F:/data/chapter9/demo/tmp/train_consider.xls' #训练样本混淆矩阵保存路径
outputfile2 = 'F:/data/chapter9/demo/tmp/test_consider.xls' #测试样本混淆矩阵保存路径

data = pd.read_excel(inputfile) #读取数据,指定编码为gbk
data = data.as_matrix()

from numpy.random import shuffle #引入随机函数
shuffle(data) #随机打乱数据
data_train = data[:int(0.8*len(data)), :] #选取前80%为训练数据
data_test = data[int(0.8*len(data)):, :] #选取前20%为测试数据

#构造特征和标签
x_train = data_train[:, 0:5]*30
y_train = data_train[:, 6].astype(int)
x_test = data_test[:, 0:5]*30
y_test = data_test[:, 6].astype(int)

model=DTC(criterion='entropy')
model.fit(x_train,y_train)

print(model.score(x_test,y_test))
#导入输出相关的库,生成混淆矩阵
from sklearn import metrics
cm_train = metrics.confusion_matrix(y_train, model.predict(x_train)) #训练样本的混淆矩阵
cm_test = metrics.confusion_matrix(y_test, model.predict(x_test)) #测试样本的混淆矩阵

#保存结果
pd.DataFrame(cm_train, index = range(1, 8), columns = range(1, 8)).to_excel(outputfile1)
pd.DataFrame(cm_test, index = range(1, 8), columns = range(1, 8)).to_excel(outputfile2)
print(model.score(x_train,y_train))
<think>嗯,用户想用决策树预测空气质量,需要实现方法和代码示例。首先我得回忆一下决策树的基本原理,以及如何应用到回归或分类问题。空气质量预测通常是分类问题,比如预测等级,或者是回归问题,比如预测PM2.5浓度。用户可能不确定该用哪种,所以可能需要两种情况的示例。 接下来,我需要考虑数据集的结构。用户可能需要收集哪些数据?根据引用[4],数据集应该包括污染物浓度(PM2.5、PM10等)、气象数据(温度、湿度、风速等)、时间和季节因素。这些特征都需要在数据预处理阶段处理,比如处理缺失值、编码分类变量(如季节)等。然后是算法选择。决策树可以直接用,但引用中提到集成方法如随机森林(引用[2]、[3])可能效果更好。用户的问题明确提到决策树,但或许可以提到集成方法作为优化方向。不过用户这次的问题主要是决策树,所以重点放在那。 代码示例方面,需要用到scikit-learn的DecisionTreeClassifier或Regressor。数据预处理步骤包括导入库、加载数据、划分特征和目标、数据集划分、处理缺失值(比如用SimpleImputer)、编码分类变量(比如OneHotEncoder)。然后构建模型,训练,评估,可视化决策树。可能还需要提到如何优化决策树参数,比如max_depth,避免过拟合。引用[1]提到sklearn.tree模块方便构建模型,所以代码示例会基于这个。可视化部分,可以用plot_tree函数,或者导出Graphviz文件。这对用户理解模型有帮助。 相关问题部分,需要考虑用户可能的后续问题,比如特征重要性、参数调优、处理过拟合、与其他模型比较(如随机森林,引用[2]、[3]),以及实时预测系统设计。需要确保回答结构清晰,分步骤,代码注释详细。同时,引用相关的引用内容,比如在集成方法部分引用[2]和[3],在数据收集部分引用[4]。检查LaTeX格式是否正确,行内公式用$...$,独立公式用$$...$$。但当前问题可能不需要太多数学公式,但如果有的话,比如信息增益公式,需要正确格式化。 最后,确保用中文回答,代码示例正确,并生成相关问题。</think>### 决策树预测空气质量实现方法 #### 一、数据集准备 1. **数据来源**:需包含空气质量指标(如PM2.5、PM10、SO₂、NO₂浓度)和影响因素(气象数据、地理位置、时间特征等)[^4]。 2. **特征工程**: - **输入特征**:温度、湿度、风速、季节(需编码为数值)、污染物历史浓度。 - **目标变量**:空气质量等级(分类任务)或PM2.5浓度(回归任务)。 - **缺失值处理**:用均值/众数填充或删除缺失样本。 #### 二、算法选择 - **分类任务**:使用`DecisionTreeClassifier`预测空气质量等级(如优/良/差)。 - **回归任务**:使用`DecisionTreeRegressor`预测具体污染物浓度值。 #### 三、代码示例(分类任务) ```python # 导入库 import pandas as pd from sklearn.tree import DecisionTreeClassifier, plot_tree from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.preprocessing import OneHotEncoder from sklearn.impute import SimpleImputer # 加载数据 data = pd.read_csv("air_quality.csv") X = data[["temperature", "humidity", "wind_speed", "season", "PM10"]] y = data["air_quality_level"] # 预处理:季节编码+缺失值填充 encoder = OneHotEncoder() season_encoded = encoder.fit_transform(X[["season"]]).toarray() imputer = SimpleImputer(strategy="mean") X_numeric = imputer.fit_transform(X.drop("season", axis=1)) X_processed = pd.concat([pd.DataFrame(X_numeric), pd.DataFrame(season_encoded)], axis=1) # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X_processed, y, test_size=0.2) # 构建模型 model = DecisionTreeClassifier(max_depth=3, criterion="gini") model.fit(X_train, y_train) # 评估与可视化 y_pred = model.predict(X_test) print("准确率:", accuracy_score(y_test, y_pred)) plot_tree(model, feature_names=X_processed.columns.tolist()) ``` #### 四、关键优化点 1. **参数调优**:通过网格搜索调整`max_depth`、`min_samples_split`防止过拟合。 2. **特征重要性分析**:通过`model.feature_importances_`筛选关键变量(如PM10可能权重较高)。 3. **集成方法扩展**:可升级为随机森林(通过`RandomForestClassifier`)提升效果[^2][^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值