机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

03-01 阅读 0评论

目录

    • 1 前言
      • 1.1 Logistic回归的介绍
      • 1.2 Logistic回归的应用
      • 2 iris数据集数据处理
        • 2.1 导入函数
        • 2.2 导入数据
        • 2.3 简单数据查看
        • 3 可视化
          • 3.1 条形图/散点图
          • 3.2 箱线图
          • 3.3 三维散点图
          • 4 建模预测
            • 4.1 二分类预测
            • 4.2 多分类预测
            • 5 讨论

              1 前言

              1.1 Logistic回归的介绍

              逻辑回归(Logistic regression,简称LR)是一种经典的二分类算法,它将输入特征与一个sigmoid函数进行线性组合,从而预测输出标签的概率。该算法常被用于预测离散的二元结果,例如是/否、真/假等。

              优点:

              • 实现简单。Logistic回归的参数可以用极大似然估计法进行求解,算法本身非常简单。

              • 速度快。Logistic回归计算量小,训练速度快。

              • 输出结果易于理解。Logistic回归的输出结果是概率,易于解释。

              • 容易扩展。Logistic回归可用于多分类问题和不平衡数据集。

                缺点:

                • 只适用于线性可分的问题。当特征之间存在非线性关系时,Logistic回归的效果会受到限制。

                • 对异常值敏感。由于Logistic回归使用了sigmoid函数,对于异常值非常敏感。

                • 容易欠拟合。当特征与目标变量之间的关系非常复杂时,Logistic回归很容易出现欠拟合现象。

                  1.2 Logistic回归的应用

                  Logistic回归广泛应用于许多领域,包括:

                  1. 金融风险评估。银行和信用卡公司使用Logistic回归来评估借款人的信用风险,预测贷款违约的概率。

                  2. 医学诊断。Logistic回归可以用于预测患者是否患有某种疾病或病情的严重程度。

                  3. 市场分析。Logistic回归可以用于预测产品或服务的市场需求,并帮助企业做出更好的决策。

                  4. 自然语言处理。Logistic回归可以用于文本分类,例如判断一段文本是否属于某个主题或情感极性。

                  5. 图像处理。Logistic回归可以用于图像分类和目标检测,例如识别数字和字母。

                  总之,Logistic回归是一种灵活的算法,可以应用于许多不同的领域和问题,特别是在需要预测二元结果的场景中表现出色。

                  2 iris数据集数据处理

                  iris数据集共有150个样本,目标变量为花的类别其都属于鸢尾属下的三个亚属(target),分别是山鸢尾 (Iris-setosa),变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。

                  四个特征,分别是花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width)。

                  2.1 导入函数

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

                  2.2 导入数据

                  from sklearn.datasets import load_iris
                  data = load_iris() 
                  iris_target = data.target 
                  iris_features = pd.DataFrame(data=data.data, columns=data.feature_names) #利用Pandas转化为DataFrame格式
                  

                  2.3 简单数据查看

                  ## 查看数据的整体信息
                  iris_features.info()
                  ## 查看每个类别数量
                  pd.Series(iris_target).value_counts()
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  ## 查看head或tail
                  iris_features.head()
                  #iris_features.tail()
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  ## 对于特征进行一些统计描述
                  iris_features.describe()
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  3 可视化

                  3.1 条形图/散点图

                  ## 合并标签和特征信息
                  iris_all = iris_features.copy() ##进行浅拷贝,防止对于原始数据的修改
                  iris_all['target'] = iris_target
                  ## 可视化
                  sns.pairplot(data=iris_all,diag_kind='hist', hue= 'target')
                  plt.show()
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  从结果可以发现,在2D情况下不同的特征组合对于不同类别的花的散点分布,以及大概的区分能力。

                  3.2 箱线图

                  ## 构建画布2x2
                  import matplotlib.pyplot as plt
                  fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))
                  ## 可视化
                  for i, col in enumerate(iris_features.columns):
                      sns.boxplot(ax=axes[i//2, i%2], x='target', y=col, saturation=0.5, palette='pastel', data=iris_all)
                      axes[i//2, i%2].set_title(col)
                  plt.tight_layout()
                  plt.show()
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  3.3 三维散点图

                  from mpl_toolkits.mplot3d import Axes3D
                  fig = plt.figure(figsize=(10,8))
                  ax = fig.add_subplot(111, projection='3d')
                  iris_all_class0 = iris_all[iris_all['target']==0].values
                  iris_all_class1 = iris_all[iris_all['target']==1].values
                  iris_all_class2 = iris_all[iris_all['target']==2].values
                  # 'setosa'(0), 'versicolor'(1), 'virginica'(2)
                  ax.scatter(iris_all_class0[:,0], iris_all_class0[:,1], iris_all_class0[:,2],label='setosa')
                  ax.scatter(iris_all_class1[:,0], iris_all_class1[:,1], iris_all_class1[:,2],label='versicolor')
                  ax.scatter(iris_all_class2[:,0], iris_all_class2[:,1], iris_all_class2[:,2],label='virginica')
                  plt.legend()
                  plt.show()
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  4 建模预测

                  4.1 二分类预测

                  ## 划分为训练集和测试集
                  from sklearn.model_selection import train_test_split
                  ## 选择其类别为0和1的样本 (不包括类别为2的样本)
                  iris_features_part = iris_features.iloc[:100]
                  iris_target_part = iris_target[:100]
                  ## 训练集测试集7/3分
                  x_train, x_test, y_train, y_test = train_test_split(iris_features_part, iris_target_part, test_size = 0.3, random_state = 2020)
                  ## 从sklearn中导入逻辑回归模型
                  from sklearn.linear_model import LogisticRegression
                  clf = LogisticRegression(random_state=0, solver='lbfgs')
                  # 训练模型
                  clf.fit(x_train, y_train)
                  
                  ## 查看其对应的w
                  print('the weight of Logistic Regression:',clf.coef_)
                  ## 查看其对应的w0
                  print('the intercept(w0) of Logistic Regression:',clf.intercept_)
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  ## 预测模型
                  train_predict = clf.predict(x_train)
                  test_predict = clf.predict(x_test)
                  
                  from sklearn import metrics
                  ## 利用accuracy(准确度)评估模型效果
                  print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))
                  print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))
                  ## 查看混淆矩阵 (预测值和真实值的各类情况统计矩阵)
                  confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
                  print('The confusion matrix result:\n',confusion_matrix_result)
                  # 可视化
                  plt.figure(figsize=(8, 6))
                  sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
                  plt.xlabel('Predicted labels')
                  plt.ylabel('True labels')
                  plt.show()
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  结果准确度为1,代表所有的样本都预测正确了,绝杀

                  4.2 多分类预测

                  ## 训练集测试集还是7/3分
                  x_train, x_test, y_train, y_test = train_test_split(iris_features, iris_target, test_size = 0.3, random_state = 2020)
                  ## 建模 
                  clf = LogisticRegression(random_state=0, solver='lbfgs')
                  ## 训练模型
                  clf.fit(x_train, y_train)
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  ## 预测模型
                  train_predict = clf.predict(x_train)
                  test_predict = clf.predict(x_test)
                  ## p = p(y=1|x,\theta)),预测模型概率
                  train_predict_proba = clf.predict_proba(x_train)
                  test_predict_proba = clf.predict_proba(x_test)
                  print('The test predict Probability of each class:\n',test_predict_proba)
                  ## 其中第一列代表预测为0类的概率,第二列代表预测为1类的概率,第三列代表预测为2类的概率。
                  ## 利用accuracy评估模型效果
                  print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))
                  print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  比起二分类的1略小,但均大于0.9

                  ## 查看混淆矩阵
                  confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
                  print('The confusion matrix result:\n',confusion_matrix_result)
                  # 可视化
                  plt.figure(figsize=(8, 6))
                  sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
                  plt.xlabel('Predicted labels')
                  plt.ylabel('True labels')
                  plt.show()
                  

                  机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

                  根据结果发现,其在三分类的结果的预测准确度上有所下降,但好在测试集还有91%,这是由于versicolor(1)和 virginica(2)这两个类别的特征,我们从可视化的时候也可以发现,其特征的边界具有一定的模糊性(边界类别混杂,没有明显区分边界),所有在这两类的预测上出现了一定的错误。

                  5 讨论

                  Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数)

                  原理的简单解释:当z=>0时, y=>0.5,分类为1,当z


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]