python数据分析之逻辑回归实践
程序员文章站
2022-05-09 10:55:50
...
1、逻辑回归简介
-
逻辑回归,实际上不是一个回归算法,而是一个分类算法,应用于对样本数据进行分类的场景中。
-
逻辑回归的分类思想是:将每个样本进行”打分“,设置一个阈值,样本达到这个阈值的,分为一个阈值;没有达到这个阈值的,分为另外一个类别。
-
逻辑回归的算法模型与线性回归类似,不过它是在线性回归得到一个连续值的基础上,通过设定一个阈值,看看这个连续值是否大于这个阈值,进而进行划分。
-
一般来说,当z值大于0时,模型将样本判定为一个类别(正例),当z值小于等于0时,模型将样本判定为另一个类别(负例),这样模型就实现了一个二分类任务。
2、sigmoid函数
-
用于表示分类的概率,取值范围是为(0,1),不仅能提供分类的结果,还能提供样本属于该类别的概率,当z值为0时,sigmoid值(概率p)为0.5。
-
如果将sigmoid值(概率p)作为正例的概率,1-p作为负例的概率,以0.5作为两个分类的阈值,则预测时就看p与1-p谁的值更大,结果就是更大值的那个类别。
3、损失函数
- 损失函数,关于误差的一个函数,用来衡量模型预测值和真实值之间的差异。
- 机器学习的目标,就是要建立一个损失函数,使得该函数的值最小。
- 损失函数是以模型参数w作为自变量的函数,自变量可能的取值组合通常是无限的,我们的目标就是要在众多可能的组合中,找到一组最合适的自变量组合(值),使得损失函数的值最小。
在逻辑回归中,使用极大似然估计和对数来定义损失函数:
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
上一篇: AR模型参数估计
下一篇: 深度学习入门之感知机
推荐阅读
-
Python数据分析之numpy数组全解析
-
Python学习笔记基本数据结构之序列类型list tuple range用法分析
-
Python基本数据结构之字典类型dict用法分析
-
荐 Python之数据分析(Numpy中读取与保存数据文件、将数据文件制成K线图)
-
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
-
荐 14天数据分析与机器学习实践之Day02——数据分析处理库Pandas应用总结
-
python数据分析之Numpy
-
Python之数据分析工具包介绍以及安装【入门必学】
-
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
-
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法