美文网首页
logistic回归算法实现贵阳市湖泊水质自动分类

logistic回归算法实现贵阳市湖泊水质自动分类

作者: qiufeng1ye | 来源:发表于2019-06-12 17:27 被阅读0次

    关键字:机器学习、数据分析、水质分类。


    需求背景

    《贵阳市湖泊监测数据》来源于贵阳市政府数据开放平台,在下载的2017年湖泊监测数据中,按照《地表水环境质量标准》(GB 3838-2002)对每期湖泊监测数据分为了五类水质,而下载的2016年湖泊监测数据并未进行分类。下面我们将基于2017年的监测数据和分类成果,根据logistic回归算法建立数据模型,对2016年的监测数据自动进行分类。

    算法简介

    logistic回归算法是统计学习中的经典分类算法,属于对数线性模型。logistic回归的主要思想是:根据现有公式对分类边界线建立回归公式,以此进行分类。logistic回归的假设函数是广义线性函数,损失函数可选用L1范数正则化或L2范数正则化,优化方法可选用梯度下降法或拟牛顿法计算数值解,或者用最小二乘法计算解析解。

    数据预处理

    • 训练数据集和测试数据集

    2017年贵阳市湖泊水质监测数据,包含2个湖泊11个断面,共12期监测数据以及水质分类,有效特征32列,合计132行,前100行作为训练集,其余的作为测试集。

    import numpy as np
    
    data = np.loadtxt('./trainset.csv',dtype=float,delimiter=',',skiprows=1)
    #划分数据集
    train_X = data[:100,2:-1]
    train_y = data[:100,-1]
    test_X = data[100:,2:-1]
    test_y = data[100:,-1]
    
    • 预测数据集

    2016年贵阳市湖泊水质监测数据,包含1个湖泊6个断面,共11期监测数据,无水质分类,有效特征32列,合计66行。

    predixdata = np.loadtxt('./classset.csv',dtype=float,delimiter=',',skiprows=1)
    predix_X = predixdata[:,2:-1]
    
    • 均值化填充

    对没有监测数据的记录用该列的平均值手动进行了填充,修正了非数值型的数据。也可以借助sklearn.preprocessing中Imputer工具处理。

    from sklearn.preprocessing import Imputer
    
    #缺失值插补
    imp = Imputer(missing_values='--', strategy='mean', axis=0)
    imp.fit(train_X)
    
    • 主成分分析(PCA)

    由于特征列过多,在超过27列后工具报错。在测试前几列的时候,自动划分的效果不是很好,所以暂未处理该项。

    from sklearn.decomposition import PCA
    
    #主成分分析
    pca=PCA(n_components='mle',svd_solver='full')
    pca.fit(train_X)
    print(pca.explained_variance_ratio_)
    print(pca.n_components_)
    
    • 标准化(Standardization)

    由于数据存在噪声值,为避免中心化的影响选用z-score处理。公式为z=(x-μ)/σ。其中x为数值,μ为平均数,σ为标准差。

    from sklearn.preprocessing import StandardScaler
    
    #标准化
    scaler = StandardScaler()
    std_train_X = scaler.fit_transform(train_X)
    std_test_X = scaler.transform(test_X)
    

    模型生成

    • 选择模型

    直接调用sklearn.linear_model的LogisticRegression,multi_class选用multinomial(多分类,不选的话为二分类),solver选用lbfgs(拟牛顿法的一种)。

    from sklearn.preprocessing import StandardScaler
    
    #选择模型
    lor = LogisticRegression(random_state=0,multi_class='multinomial',solver='lbfgs') 
    
    • 训练模型

    #训练模型
    lor.fit(std_train_X,train_y)
    
    • 自动分类

    #自动分类
    predict_test_y = lor.predict(predix_X)
    

    模型评价

    需要人工将预测数据集的水质分类,再用真值和预测值对比分析。这里是用测试集评价,评价分数如下:

    lor.score(std_test_X,test_y)
    
    评价结果

    相关文章

      网友评论

          本文标题:logistic回归算法实现贵阳市湖泊水质自动分类

          本文链接:https://www.haomeiwen.com/subject/hqajxctx.html