逻辑回归算法总结

模型

损失函数

评价指标

准确率(Accuracy)

 缺点:当样本不均衡的时候,这个指标不能用来评价模型的性能。比如测试集样本有正样本99个,负样本为1个,即使模型将所有样本都预测为正样本,也不能表示模型的性能比较好。

精准率(Precision)

针对预测结果而言的一个评价指标。在模型预测为正样本的结果中,真正是正样本所占的百分比,具体公式如下

精准率的含义就是在预测为正样本的结果中,有多少是准确的。这个指标比较谨慎,分类阈值较高。

召回率(Recall)

针对原始样本而言的一个评价指标。在实际为正样本中,被预测为正样本所占的百分比。具体公式如下:

 尽量检测数据,不遗漏数据

与线性回归的区别

逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题。

优缺点

优点:

  • 实现简单,广泛的应用于工业问题上;
  • 分类时计算量非常小,速度很快,存储资源低;
  • 便利的观测样本概率分数;
  • 对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;
  • 计算代价不高,易于理解和实现;

缺点:

  • 当特征空间很大时,逻辑回归的性能不是很好;
  • 容易欠拟合,一般准确度不太高
  • 不能很好地处理大量多类特征或变量;
  • 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分
  • 对于非线性特征,需要进行转换;
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.datasets import load_iris
data=load_iris()
iris_target=data.target
iris_features=pd.DataFrame(data=data.data,columns=data.feature_names)
print(iris_features.to_string())
# 利用.info()查看数据的整体信息
print(iris_features.info())
# 对于特征进行描述性统计
print(iris_features.describe())

# print(iris_target)
# 查看每个类别的数量
print(pd.Series(iris_target).value_counts())

# 合并特征和类标签
iris_all=iris_features.copy() # 进行浅拷贝,防止对于原始数据的修改
iris_all['target']=iris_target
## 特征与标签组合的散点可视化
sns.pairplot(data=iris_all,diag_kind='hist',hue='target')
plt.show()
# 利用箱型图也可以得到不同特征上的分布差异情况
for col in iris_features:
    sns.boxplot(x='target',y=col,palette='pastel',data=iris_all)
    plt.title(col)
    plt.show()


## 为了正确评估模型性能,将数据划分为训练集和测试集,并在训练集上训练模型,在测试集上验证模型性能
from sklearn.model_selection import train_test_split # 导入train_test_split 对数据集进行划分,划分测试集和训练集的大小比例

# 选择其类别为0和1的样本(不包括类别为2的样本)
iris_features_part=iris_features.iloc[:100]
iris_target_part=iris_target[:100]

# 测试集大小为20% (80%/20%分)
x_train,x_test,y_train,y_test=train_test_split(iris_features_part,iris_target_part,test_size=0.2,random_state=2020)

# 进行逻辑回归
from sklearn.linear_model import LogisticRegression
clf=LogisticRegression(random_state=0,solver='lbfgs')
clf.fit(x_train,y_train)

# 查看对应的w及w0
print('the weight of logistic Regression:\n',clf.coef_)
print('the intercept(w0) of logistic Regression:\n',clf.intercept_)

# 在训练集和测试集上分别利用训练好的模型进行预测
train_predict=clf.predict(x_train)
test_predict=clf.predict(x_test)
# 预测的概率
train_predict_proba=clf.predict_proba(x_train)
test_predict_proba=clf.predict_proba(x_test)

from sklearn import metrics
# 利用accuracy(准确度)【预测正确样本数目站总预测样本数目的比列】评估模型效果
print('the accuracy of the logistic regression is:\n',metrics.accuracy_score(y_train,train_predict))
print('the accuracy of the logistic regression is:\n',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()
sns.heatmap(confusion_matrix_result,annot=True,cmap='Blues')
plt.xlabel('predicted labels')
plt.ylabel('True labels')
plt.show()

参考文献:

【机器学习】逻辑回归(非常详细) - 知乎 (zhihu.com)

逻辑回归模型详解(Logistic Regression)_logistic回归模型_taoKingRead的博客-CSDN博客

分类算法评价指标详解 - 知乎 (zhihu.com)

基于鸢尾花数据集的逻辑回归分类实践 - 知乎 (zhihu.com)

猜你喜欢

转载自blog.csdn.net/qq_40107571/article/details/129805298