模型
损失函数
评价指标
准确率(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博客