• 机器学习-逻辑回归与线性回归


    logistic回归与线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized 
    linear 
    model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最为常用的就是二分类的logistic回归。而逻辑回归是用于分类问题,线性回归才是用于回归问题的。

    接下来就用python的sklearn实现一个例子,这里用到了skearn中的load_iris数据

    #第二天 逻辑回归与线性回归
    #导入iris数据
    from sklearn.datasets import load_iris
    #导入回归方法
    from sklearn.linear_model import LinearRegression,LogisticRegression
    #导入拆分数据集的方法
    from sklearn.model_selection import train_test_split
    #用于分析验证测试结果
    from sklearn.metrics import confusion_matrix,classification_report
    
    # 载入sklearn数据
    iris = load_iris()
    # 获取特征数据
    iris_data = iris['data']
    # 特征列名
    columns = iris['feature_names']
    # 获取签值
    iris_label = iris['target']
    
    # 拆分训练集和测试集
    train_x,test_x,train_y,test_y = train_test_split(iris_data,iris_label,test_size=0.3)
    clf = LogisticRegression()
    #训练
    clf.fit(train_x,train_y)
    #预测
    predict_y = clf.predict(test_x)
    
    print(confusion_matrix(test_y,predict_y))
    print(classification_report(test_y,predict_y))

    代码很简单,导入数据和训练基本上就是这样,这里说一下confusion_matrix这个主要用于查看预测结果和真是结果的差别

    [[18  0  0]
     [ 0 13  1]
     [ 0  1 12]]

    以上结果,列是预测结果数量,行是真是结果数量,在对角线上的数据说明预测和真实结果一直,这里看第二行三列,这里就说明真实结果是类型二结果预测成为类型三。

    让后就是classification_report这个方法可以看到预测结果的一些信息,比如准确率,召回率等等

                 precision    recall  f1-score   support
    
              0       1.00      1.00      1.00        18
              1       0.93      0.93      0.93        14
              2       0.92      0.92      0.92        13
    
    avg / total       0.96      0.96      0.96        45

    可以看到有三个类型0,1,2

    第一列precision表示准确率,从上往下意思是预测为0类的准确率为1,预测为1类的准确率是0.93,预测为2类的准确率是0.92,最后一行是平均准确率。

    第二列recall表示召回率

    第三列f1-score表示F1分数

    第四列support表示改分类有多少样本

    从这个结果来看,整体预测结果较好,平均准确率和召回率还有F1都比较理想,特别是在类型0上是完全准确,类别2和3相对要差一点。

    由于数据特征有3个无法用matplotlib可视化,下面我们用一个特征的数据实现一下线性回归并且可视化出来。

    import numpy as np
    from matplotlib import pyplot as plt
    
    #生成二维的线性散点,加入一些偏移量
    x = np.linspace(0, 50, 100) + 2*np.random.randn(100)
    y = 2*x + 5*np.random.randn(100)
    #预测需要的x值二维数组,用此方法将数组转换成二维的
    x = x.reshape(-1,1)
    # 上面例子有,同样是拆分训练集和测试集
    train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.3)
    # 我们先画一下训练集和测试集的数据吧
    plt.figure(figsize=(16,6))
    plt.subplot(1,2,1)
    plt.scatter(train_x,train_y,label='train data')
    plt.legend()
    plt.subplot(1,2,2)
    plt.scatter(test_x,test_y,label='test data')
    plt.legend()
    plt.show()

    左边的训练集,右边的是测试集,接下来我们用训练集开始训练,让后用测试集来测训练的效果,并且打印出来

    # 线性回归方法
    clf = LinearRegression()
    # 用训练集训练
    clf.fit(train_x,train_y)
    # 预测测试集
    predict_y = clf.predict(test_x)
    # 打印出来
    plt.figure(figsize=(8,6))
    plt.xlim([-5,55])
    plt.ylim([-10,110])
    plt.xlabel('x')
    plt.ylabel('y')
    plt.scatter(test_x,test_y,c='r',label='really')
    plt.plot(test_x,predict_y,color='b',label='predict')
    plt.legend()
    plt.show()

    红色点是真是测试集数据,蓝线是预测的线性模型。

  • 相关阅读:
    给元素查索引
    数组的反转和排序
    本地修改文件到git
    +new Date()
    文字双层投影
    表格组件 自定义宽度 设置 span 内容 超出省略号
    iframe的使用
    分页获取列表进行索引累加
    日期时间格式化
    柱状echarts 自定义图例设置
  • 原文地址:https://www.cnblogs.com/yifengjianbai/p/10371380.html
Copyright © 2020-2023  润新知