机器学习 回归与分类模型 数据挖掘

机器学习 回归与分类模型 数据挖掘

基于数据集data.xlsx包含某地区某一年每一日的AQI、质量等级、PM2.5、PM10、SO2、CO、NO2、O3_8h等指标数据:

回归模型 根据PM2.5、PM10、SO2、CO、NO2、O3_8h等指标数据作为特征集,AQI空气质量指数作为目标向量构建线性回归模型并进行预测。

分类模型:根据AQI空气质量指数对大气质量等级进行分类并进行预测

数据提取与预处理

1、导入部分所需要的模块

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

2、读取数据集,此处为xlsx文件

'''获取数据集,此处为excel文件'''
def _get_data():
    df = pd.read_excel('./data.xlsx')
    return df

3、数据异常值处理以及数据编码转换

'''数据异常值处理以及数据编码'''
def _wash_data():
    data = _get_data()
    from sklearn.impute import SimpleImputer  # 数据预处理工具
    # 对数值型特征进行均值填充:
    num_features = ['AQI', 'PM2.5', 'PM10', 'SO2', 'CO', 'NO2', 'O3_8h']#定义了数值型特征的列表。

    imputer = SimpleImputer(strategy='mean')#创建了一个用于填充空值的SimpleImputer对象,策略为使用特征的均值进行填充。

    data[num_features] = imputer.fit_transform(data[num_features])#对data中的数值型特征进行均值填充操作。

    # 对分类型特征进行众数填充(如果有的话):
    cat_features = ['质量等级']#定义了分类型特征的列表。

    cat_imputer = SimpleImputer(strategy='most_frequent')#创建了一个用于填充空值的SimpleImputer对象,策略为使用特征的众数进行填充。

    data[cat_features] = cat_imputer.fit_transform(data[cat_features])#对data中的分类型特征进行众数填充操作。

    '''将数据集中质量等级进行分类。转换为0-n-1的数(n为编码标签的个数)'''
    from sklearn.preprocessing import LabelEncoder  # 数据编码工具
    encoder = LabelEncoder()

    # 将质量等级编码[0、1、2、3、4]分别对应['中度污染' '优' '良' '轻度污染' '重度污染']
    data['质量等级'] = encoder.fit_transform(data['质量等级'])

    return data


模型构建

线性回归模型

1、划分特征集和目标向量

class LinearRegression(object):
    df = _wash_data()

    # 选取特征集data_list赋值给变量x_data
    data_list = ['PM2.5', 'PM10', 'SO2', 'CO', 'NO2', 'O3_8h']
    x_data = df[data_list]

    # 目标向量赋值给y_data
    y_data = df['AQI']

    from sklearn.model_selection import train_test_split  # 对数据集进行划分

    '''划分训练集和测试集'''
    '''将数据集以8;2的比例分为训练集和测试集,将各空气质量指标赋值到变量x中,将转换后的质量等级赋值到变量y中'''
    x_train, x_test, y_train, y_test = train_test_split(x_data, y_data,  # 前两个参数表示样本的特征集以及分类
                                                        test_size=0.2,  # 表示测试集占比20%
                                                        random_state=1)  # 用于控制每次运行的数据划分结果

2、可视化部分一:查看特征集与目标之间的相关性。

    # 数据可视化1:各自查看特征集中的对象与目标向量的关系
    sns.pairplot(df
                 , x_vars=data_list
                 , y_vars='AQI'
                 , height=7
                 , aspect=0.8
                 , kind='reg')
    plt.show()

在这里插入图片描述

3、构建模型,进行回归预测

# 构建线性回归模型
    from sklearn.linear_model import LinearRegression
    linreg = LinearRegression()
    model = linreg.fit(x_train, y_train)

    # 进行模型的预测
    y_pred = linreg.predict(x_test)

    # 数据可视化2:预测值和真实值的比较
    import matplotlib.pyplot as plt
    plt.figure()
    plt.plot(range(len(y_pred)), y_pred, 'b', label="predict")
    plt.plot(range(len(y_pred)), y_test, 'r', label="test")
    plt.legend(loc="upper right")
    plt.xlabel("the number of sales")
    plt.ylabel('value of sales')
    plt.show()

在这里插入图片描述

分类模型

1、划分训练集和测试集

class GaussianNB(object):

    '''划分训练集和测试集'''
    df = _wash_data()

    '''将数据集以8;2的比例分为训练集和测试集,将各空气质量指标赋值到变量x中,将转换后的质量等级赋值到变量y中'''
    # data_list = ['PM2.5', 'PM10', 'SO2', 'CO', 'NO2', 'O3_8h']
    x_data = df['AQI']  # 选取空气质量指数赋值到x_data中
    x_data = pd.DataFrame(x_data)

    y_data = df['质量等级']  # 将转换后的质量等级赋值到变量y_data中

    from sklearn.model_selection import train_test_split  # 对数据集进行划分

    x_train, x_test, y_train, y_test = train_test_split(x_data, y_data,  # 前两个参数表示样本的特征集以及分类
                                                        test_size=0.2,  # 表示测试集占比20%
                                                        random_state=40,  # 用于控制每次运行的数据划分结果
                                                        stratify=y_data)  # 保证数据集划分后样本分布的一致性


2、模型构建与预测,输出模型准确率和混淆矩阵。

    from sklearn.naive_bayes import GaussianNB  # 调用朴素贝叶斯模型

    gnb_clf = GaussianNB()
    gnb_clf.fit(x_train, y_train)
    # 使用训练好的模型进行预测
    y_pred = gnb_clf.predict(x_test)

    from sklearn.metrics import accuracy_score  # accuracy_score()对模型准确率进行评价

    # 输出模型的准确率
    print("准确率:%f"%(accuracy_score(y_test,y_pred)))
    #准确率:1.000000
    
    # 生成混淆矩阵
    from sklearn.metrics import confusion_matrix  # 生成混淆矩阵对模型进行评估
    conf_matrix = confusion_matrix(y_test,y_pred)
    sns.heatmap(conf_matrix,annot=True,fmt="d",cmap="Blues")
    plt.xlabel('Predicted')
    plt.ylabel('Actual')
    plt.show()


在这里插入图片描述

3、模型调参,输出最优参数和准确率

# 模型调参
    param_grid = {
        'var_smoothing': [1e-7, 1e-8, 1e-9, 1e-10, 1e-11, 1e-12]
    }

    from sklearn.model_selection import GridSearchCV  # 对模型进行调参

    # 使用GridSearchCV进行5折交叉验证和网格搜索,来找到最佳的平滑参数取值。最后输出最佳的平滑参数,verbose取2时显示训练过程,
    gnb_grid_clf = GridSearchCV(gnb_clf,param_grid,cv=5,verbose=0)
    gnb_grid_clf.fit(x_train,y_train)

    # 输出最优参数:
    print(f'最优参数值:{gnb_grid_clf.best_params_}')

    # 使用调参后的模型进行预测
    true_y_pred = gnb_grid_clf.best_estimator_.predict(x_test)

    # 输出模型的准确率
    print("准确率:%f"%(accuracy_score(y_test,true_y_pred)))

    ##最优参数值:{'var_smoothing': 1e-07}
    ##准确率:1.000000

数据集的获取可私信。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值