逻辑回归算法、数据标准化处理及数据预测和数据的分类结果报告
目录
1 逻辑回归算法
1.1 概念理解
是用于处理因变量为分类变量的回归问题,常见的是二分类问题,可以处理预测的值是为分类变量的问题,它实际上是一种分类方法。
1.2 算法导入
python">from sklearn.linear_model import LogisticRegression
1.3 算法优缺点
- 优点:
- 实现简单,易于理解和实现;
- 计算代价不高,速度很快,存储资源低。
- 缺点:
- 容易欠拟合,分类精度可能不高。
2 LogisticRegression理解
2.1查看参数定义
python">def __init__(self,penalty="l2",*,dual=False,tol=1e-4,C=1.0,fit_intercept=True,intercept_scaling=1,class_weight=None,random_state=None,solver="lbfgs",max_iter=100,multi_class="auto",verbose=0,warm_start=False,n_jobs=None,l1_ratio=None,)
2.2 参数理解
- Penalty:正则化方式,有l1和l2两种。用于指定惩罚项中使用的规范。
- newton-cg、sag和lbfgs求解算法只支持L2规范。L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布。
- Dual:按默认即可。对偶方法只用在求解线性多核(liblinear)的L2惩罚项上。当样本数量>样本特征的时候,dual通常设置为False。
- Tol:float,默认值:1e-4,容许停止标准,即我们说的要迭代停止所需达到的精度要求。
- C:正则化强度,为浮点型数据。正则化系数λ的倒数,float类型,默认为1.0,必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化。
- fit_intercept:指定是否应该将常量(即偏差或截距)添加到决策函数中,相当于是否加入截距项b,默认加入。
- intercept_scaling:仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1。
- class_weight:用于标示分类模型中各种类型的权重,可以是一个字典或者’balanced’字符串,默认为None
- random_state:随机数产生器在对数据进行洗牌时使用的种子,仅在正则化优化算法为sag,liblinear时有用。
- Solver:{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’},优化拟合参数算法选择,默认为liblinear。solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择,分别是:
- liblinear:使用坐标轴下降法来迭代优化损失函数。使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
- newton-cg:牛顿法,sag方法使用一阶导数,而牛顿法采用了二阶泰勒展开,这样缩减了迭代轮数,但是需要计算Hsssian矩阵的逆,所以计算复杂度较高。【也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。】
- Lbfgs:拟牛顿法,用较低的代价寻找Hessian矩阵的近似逆矩阵,便有了拟牛顿法。【拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。】
- Sag:即随机平均梯度下降,是求解无约束优化问题最经典,最简单的方法之一。【即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。】
- Saga:线性收敛的随机优化算法。【线性收敛的随机优化算法的的变种。】
liblinear适用于小数据集,而sag和saga适用于大数据集因为速度更快。
- max_iter:算法收敛最大迭代次数,int类型,默认为100。仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数。
- multi_class:分类方式选择参数,str类型,可选参数为ovr和multinomial,默认为ovr。
- verbose:日志冗长度,int类型,默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。
- warm_start:热启动参数,bool类型,默认为False。如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。
- n_jobs:并行数。int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。
2.3 方法
- fit(x,y):训练模型,x为特征数据,y为结果
score(x,y):拟合度,x,y为已知的数据及结果,计算fit()模型与数据的拟合度在[0,1]间,趋于1优,趋于0劣 - predict([[]数据]):预测数据结果,括号内为二维数组
2.4基本格式
lg = LogisticRegression()
x=特征数据
y=数据结果
lg.fit(x,y)
result = lg.predict(x1)
先引用LogisticRegression()函数,根据历史特征数据和数据结果,训练fit()模型,然后预测x1的回归结果result
3 数据标准化处理
3.1 0~1标准化
3.1.1概念
对原始数据的线性变换,结果映射在[0,1]区间。
3.1.2公式
3.2 z标准化
3.2.1概念
基于原始数据的均值(mean )和标准差(stand ard deviation)进行数据的标准化。
3.2.2公式
3.2.3算法导入和实现
z标准化Amount列数据
python">from sklearn.preprocessing import StandardScaler
data['Amount'] = scaler.fit_transform(data[['Amount']])
4 预测逻辑回归数据
4.1问题及理解
问题:给定数据,预测分类
特征数据:除类别列外,其他有关列
类别标签:类别列
第一列为时间,无关,最后一列为类别给定的数据:
4.2 数据预处理
数据标准化统一
Amount列不是z标准化处理的结果,需要进行z标准化处理
python">data['Amount'] = scaler.fit_transform(data[['Amount']])
数据测试数据和训练数据划分
python">from sklearn.model_selection import train_test_split
# 训练集特征,测试集特征,训练集结果,测试集结果,test_size抽取的测试集百分比,train_size 抽取的训练集百分比
x_tr,x_te,y_tr,y_te = \train_test_split(x_all, y_all, train_size=0.3,random_state=0)
4.3 预测数据和分类结果
代码展示:
python">import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_predict, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn import metrics
from sklearn.model_selection import cross_val_score
from sklearn.metrics import confusion_matrix
# 标准化处理
scaler = StandardScaler()
data = pd.read_csv('creditcard.csv')
a = data[['Amount']]
b = data['Amount']
# z标准化处理Amount,再存Amount中
data['Amount'] = scaler.fit_transform(data[['Amount']])
# 删除time列
data = data.drop(['Time'],axis=1)
# 特征数据x,删除class列
x_all = data.drop(['Class'],axis=1)
# class为标签结果列
y_all = data.Class
# 训练集特征,测试集特征,训练集结果,测试集结果,test_size抽取的测试集百分比,train_size 抽取的训练集百分比
x_tr,x_te,y_tr,y_te = \train_test_split(x_all, y_all, train_size=0.3,random_state=0)
# 逻辑回归方法引用
lg = LogisticRegression(C=1)
# 训练集训练模型
lg.fit(x_tr,y_tr)
# 预测测试集结果
re_pr = lg.predict(x_te)
# 拟合度评分
score = lg.score(x_te,y_te)
# 分类结果报告
print(metrics.classification_report(y_te, re_pr))
运行结果:
4.3.1分类结果报告
- precision 精确率
Precision=TP/(TP + FP) - recall 召回率,真正例率
Recall =TP/(TP + FN)
其中:
TP (True Positive):正确预测的正样本数量。
TN (True Negative):正确预测的负样本数量。
FP (False Positive):错误预测的正样本数量(实际上是负样本)。
FN (False Negative):错误预测的负样本数量(实际上是正样本)。
上图0,1,为类别。