机器学习——鸢尾花数据集的线性多分类

一、认识鸢尾花数据集

  • Iris flower数据集是1936年由Sir Ronald Fisher引入的经典多维数据集,可以作为判别分析(discriminant analysis)的样本。
  • 该数据集包含Iris花的三个品种(Iris setosa, Iris virginica and Iris versicolor)各50个样本,每个样本还有4个特征参数(分别是萼片的长宽和花瓣的长宽,以厘米为单位)
    查看数据集
    在这里插入图片描述
    类别说明
    在这里插入图片描述

二、LogisticRegression

  1. LogisticRegression(逻辑回归)说明
    逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法。

  2. LogisticRegression回归模型在Sklearn中的使用
    ① 导入模型

    from sklearn.linear_model import LogisticRegression  #导入逻辑回归模型 
    

    ②fit()训练
    调用fit(x,y)的方法来训练模型,其中x为数据的属性,y为所属类型

    clf = LogisticRegression()
    print(clf)
    clf.fit(train_feature,label)
    

    ③predict()预测
    利用训练得到的模型对数据集进行预测,返回预测结果

    predict['label'] = clf.predict(predict_feature)
    
  3. LogisticRegression回归模型参数说明

    LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
              intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
              penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
              verbose=0, warm_start=False)
    

    ①正则化选择参数(penalty)
    penalty参数可选择的值为"l1"和"l2",分别对应L1的正则化和L2的正则化,默认是L2的正则化。在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。当模型的特征非常多,希望一些不重要的特征系数归零,让模型系数稀疏化,可以使用L1正则化。
    ②优化算法选择参数(solver)
    solver参数决定了我们对逻辑回归损失函数的优化方法,有4种算法可以选择,分别是:liblinear,lbfgs,newton-cg,sag
    说明:

    参数solver的选择
    当penalty是L2正则化,可选的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}。当penalty是L1正则化,就只能选择‘liblinear’了。
    这是因为L1正则化的损失函数不是连续可导的,而{‘newton-cg’, ‘lbfgs’,‘sag’}这三种优化算法时都需要损失函数的一阶或者二阶连续导数。

    ③分类方式选择参数(multi_class)
    multi_class参数决定了我们分类方式的选择,有 ovr和multinomial两个值可以选择,默认是 ovr。两者区别主要在多元逻辑回归上。
    说明:

    如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg, lbfgs和sag都可以选择。但是如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了。

    ④类型权重参数(class_weight)
    class_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。
    ⑤样本权重参数(sample_weight)
    由于样本不平衡,导致样本不是总体样本的无偏估计,从而可能导致我们的模型预测能力下降。可以通过调节样本权重来尝试解决这个问题。
    调节样本权重的方法:
    第一种是在class_weight使用balanced。
    第二种是在调用fit函数时,通过sample_weight来自己调节每个样本权重。
    说明:

    如果上面两种方法都用到了,那么样本的真正权重是class_weight*sample_weight。

三、实现线性多分类

(一)取萼片的长宽作为特征进行分类

  1. 导入相关包
    #导入相关包
    import numpy as np
    from sklearn.linear_model import LogisticRegression
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    from sklearn import datasets
    from sklearn import preprocessing
    import pandas as pd
    from sklearn.preprocessing import StandardScaler
    from sklearn.pipeline import Pipeline
    
  2. 获取数据集
    # 获取所需数据集
    iris=datasets.load_iris()
    #每行的数据,一共四列,每一列映射为feature_names中对应的值
    X=iris.data
    print(X)
    #每行数据对应的分类结果值(也就是每行数据的label值),取值为[0,1,2]
    Y=iris.target
    print(Y)
    
  3. 对数据进行处理
    #归一化处理
    X = StandardScaler().fit_transform(X)
    print(X)
    
  4. 训练模型
    lr = LogisticRegression()   # Logistic回归模型
    lr.fit(X, Y)        # 根据数据[x,y],计算回归参数
    
  5. 绘制分类后的图像
    N, M = 500, 500     # 横纵各采样多少个值
    x1_min, x1_max = X[:, 0].min(), X[:, 0].max()   # 第0列的范围
    x2_min, x2_max = X[:, 1].min(), X[:, 1].max()   # 第1列的范围
    t1 = np.linspace(x1_min, x1_max, N)
    t2 = np.linspace(x2_min, x2_max, M)
    x1, x2 = np.meshgrid(t1, t2)                    # 生成网格采样点
    x_test = np.stack((x1.flat, x2.flat), axis=1)   # 测试点
    
    cm_light = mpl.colors.ListedColormap(['#77E0A0', '#FF8080', '#A0A0FF'])
    cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
    y_hat = lr.predict(x_test)       # 预测值
    y_hat = y_hat.reshape(x1.shape)                 # 使之与输入的形状相同
    plt.pcolormesh(x1, x2, y_hat, cmap=cm_light)     # 预测值的显示
    plt.scatter(X[:, 0], X[:, 1], c=Y.ravel(), edgecolors='k', s=50, cmap=cm_dark)    
    plt.xlabel('petal length')
    plt.ylabel('petal width')
    plt.xlim(x1_min, x1_max)
    plt.ylim(x2_min, x2_max)
    plt.grid()
    plt.show()
    
    绘制结果
    在这里插入图片描述
  6. 预测模型
    y_hat = lr.predict(X)
    Y = Y.reshape(-1)
    result = y_hat == Y
    print(y_hat)
    print(result)
    acc = np.mean(result)
    print('准确度: %.2f%%' % (100 * acc))
    
    预测结果
    在这里插入图片描述

(二)取花瓣的长宽作为特征进行分类

方法跟上面一样,主要是数据处理上,取后面两个特征值

X=X[:,2:]

绘制结果
在这里插入图片描述
预测结果
在这里插入图片描述
当然可以对四个特征值进行组合(对数据进行处理),然后按照上面方式进行分类。

四、小结

通过线性多分类的实现,主要认识逻辑回归的使用过程。其使用过程主要包括三个过程,分别是导入整个模型包,训练模型,预测结果。从最后预测结果来看,整个模型的准确性还是比较高,准确度是可以满足要求的。两个结果的对比来看,通过花瓣来分类的结果会比萼片分类得到的结果准确率更好。

五、参考链接

逻辑回归(Logistic Regression)

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值