欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python数据分析之逻辑回归实践

程序员文章站 2022-05-09 10:55:50
...

1、逻辑回归简介
  • 逻辑回归,实际上不是一个回归算法,而是一个分类算法,应用于对样本数据进行分类的场景中。

  • 逻辑回归的分类思想是:将每个样本进行”打分“,设置一个阈值,样本达到这个阈值的,分为一个阈值;没有达到这个阈值的,分为另外一个类别。

  • 逻辑回归的算法模型与线性回归类似,不过它是在线性回归得到一个连续值的基础上,通过设定一个阈值,看看这个连续值是否大于这个阈值,进而进行划分。
    python数据分析之逻辑回归实践

  • 一般来说,当z值大于0时,模型将样本判定为一个类别(正例),当z值小于等于0时,模型将样本判定为另一个类别(负例),这样模型就实现了一个二分类任务。

2、sigmoid函数
  • 用于表示分类的概率,取值范围是为(0,1),不仅能提供分类的结果,还能提供样本属于该类别的概率,当z值为0时,sigmoid值(概率p)为0.5。

  • 如果将sigmoid值(概率p)作为正例的概率,1-p作为负例的概率,以0.5作为两个分类的阈值,则预测时就看p与1-p谁的值更大,结果就是更大值的那个类别。
    python数据分析之逻辑回归实践

python数据分析之逻辑回归实践

3、损失函数
  • 损失函数,关于误差的一个函数,用来衡量模型预测值和真实值之间的差异。
  • 机器学习的目标,就是要建立一个损失函数,使得该函数的值最小。
  • 损失函数是以模型参数w作为自变量的函数,自变量可能的取值组合通常是无限的,我们的目标就是要在众多可能的组合中,找到一组最合适的自变量组合(值),使得损失函数的值最小。

在逻辑回归中,使用极大似然估计和对数来定义损失函数:
python数据分析之逻辑回归实践

4、二分类逻辑回归
  • 分类类别只有两个的逻辑回归,称为二分类逻辑回归

以鸢尾花数据集为例,通过逻辑回归算法来预测鸢尾花的种类(仅使用两个类别):

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import warnings

warnings.filterwarnings("ignore")

iris = load_iris()        				# 加载数据集
X, y = iris.data, iris.target			# 类别作为目标值

X = X[y != 2, :]                        # 仅使用类别0和类别1(一共3个类别,排除类别2)
y = y[y != 2]

# 切分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

lr = LogisticRegression()         # 实例化逻辑回归对象
lr.fit(X_train, y_train)          # 使用训练集进行模型训练
y_hat = lr.predict(X_test)

print("模型权重:", lr.coef_)
print("截距:", lr.intercept_)
print("真实值:", y_test)
print("预测值:", y_hat)
print("分类正确率:", np.sum(y_test == y_hat) / len(y_test))

probability = lr.predict_proba(X_test)		# 获取预测的概率值,包含数据属于每个类别的概率。
print("预测为类别0的概率:",probability[:, 0])
print("预测为类别1的概率:",probability[:, 1])

对于以上例子,结果如下,可以看出预测结果是非常好的:

模型权重: [[-0.39689472 -1.32977144  2.10187204  0.94407627]]
截距: [-0.22716464]
真实值: [0 1 0 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 1 0]
预测值: [0 1 0 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 1 0]
分类正确率: 1.0

预测为类别0的概率: [0.95222211 0.01356958 0.96852527 0.01128537 0.02334024 0.06848858
 0.98841556 0.0095643  0.01041143 0.02982946 0.01527376 0.02781908
 0.01201314 0.97115808 0.96742957 0.93718815 0.98953678 0.92209155
 0.99233723 0.93693231 0.94961663 0.02150912 0.94446203 0.03685528
 0.94763495]
 
预测为类别1的概率: [0.04777789 0.98643042 0.03147473 0.98871463 0.97665976 0.93151142
 0.01158444 0.9904357  0.98958857 0.97017054 0.98472624 0.97218092
 0.98798686 0.02884192 0.03257043 0.06281185 0.01046322 0.07790845
 0.00766277 0.06306769 0.05038337 0.97849088 0.05553797 0.96314472
 0.05236505]
5、多分类逻辑回归
  • 分类类别为两个以上的逻辑回归,称为多分类逻辑回归

以鸢尾花数据集为例,通过逻辑回归算法来预测鸢尾花的种类(使用全部类别):

iris = load_iris()
X, y = iris.data, iris.target			# 使用全部类别

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

lr = LogisticRegression()		# 实例化逻辑回归对象
lr.fit(X_train, y_train)		# 使用训练集进行模型训练
y_hat = lr.predict(X_test)

print("模型权重:", lr.coef_)
print("截距:", lr.intercept_)
print("真实值:", y_test)
print("预测值:", y_hat)
print("分类正确率:", np.sum(y_test == y_hat) / len(y_test))

对于以上例子,结果如下,可以看出预测结果没有两个类别那么好,不过也还是不错的:

模型权重: [[ 0.40426382  1.34180011 -2.13370666 -0.96192251]
 [ 0.35954977 -1.41614128  0.47534248 -1.1955024 ]
 [-1.66480548 -1.24263203  2.38779598  2.15916011]]
截距: [ 0.25264618  0.88541704 -1.01920582]
真实值: [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0
 1]
预测值: [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 2 1 0 0 2 2 0 0 2 0 0 1 1 0 2 2 0 2 2 2 0
 2]
分类正确率: 0.868421052631579
相关标签: python数据分析