c2c网站建设公司,池州网站建设公司,百度知道,设计师在线接单目录1 前言1.1 Logistic回归的介绍1.2 Logistic回归的应用2 iris数据集数据处理2.1 导入函数2.2 导入数据2.3 简单数据查看3 可视化3.1 条形图/散点图3.2 箱线图3.3 三维散点图4 建模预测4.1 二分类预测4.2 多分类预测5 讨论1 前言
1.1 Logistic回归的介绍
逻辑回归#xff…
目录1 前言1.1 Logistic回归的介绍1.2 Logistic回归的应用2 iris数据集数据处理2.1 导入函数2.2 导入数据2.3 简单数据查看3 可视化3.1 条形图/散点图3.2 箱线图3.3 三维散点图4 建模预测4.1 二分类预测4.2 多分类预测5 讨论1 前言
1.1 Logistic回归的介绍
逻辑回归Logistic regression简称LR是一种经典的二分类算法它将输入特征与一个sigmoid函数进行线性组合从而预测输出标签的概率。该算法常被用于预测离散的二元结果例如是/否、真/假等。
优点 实现简单。Logistic回归的参数可以用极大似然估计法进行求解算法本身非常简单。 速度快。Logistic回归计算量小训练速度快。 输出结果易于理解。Logistic回归的输出结果是概率易于解释。 容易扩展。Logistic回归可用于多分类问题和不平衡数据集。
缺点 只适用于线性可分的问题。当特征之间存在非线性关系时Logistic回归的效果会受到限制。 对异常值敏感。由于Logistic回归使用了sigmoid函数对于异常值非常敏感。 容易欠拟合。当特征与目标变量之间的关系非常复杂时Logistic回归很容易出现欠拟合现象。
1.2 Logistic回归的应用
Logistic回归广泛应用于许多领域包括 金融风险评估。银行和信用卡公司使用Logistic回归来评估借款人的信用风险预测贷款违约的概率。 医学诊断。Logistic回归可以用于预测患者是否患有某种疾病或病情的严重程度。 市场分析。Logistic回归可以用于预测产品或服务的市场需求并帮助企业做出更好的决策。 自然语言处理。Logistic回归可以用于文本分类例如判断一段文本是否属于某个主题或情感极性。 图像处理。Logistic回归可以用于图像分类和目标检测例如识别数字和字母。
总之Logistic回归是一种灵活的算法可以应用于许多不同的领域和问题特别是在需要预测二元结果的场景中表现出色。
2 iris数据集数据处理
iris数据集共有150个样本目标变量为花的类别其都属于鸢尾属下的三个亚属target分别是山鸢尾 (Iris-setosa)变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。
四个特征分别是花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width)。
2.1 导入函数
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns2.2 导入数据
from sklearn.datasets import load_iris
data load_iris()
iris_target data.target
iris_features pd.DataFrame(datadata.data, columnsdata.feature_names) #利用Pandas转化为DataFrame格式2.3 简单数据查看
## 查看数据的整体信息
iris_features.info()## 查看每个类别数量
pd.Series(iris_target).value_counts()## 查看head或tail
iris_features.head()
#iris_features.tail()## 对于特征进行一些统计描述
iris_features.describe()3 可视化
3.1 条形图/散点图
## 合并标签和特征信息
iris_all iris_features.copy() ##进行浅拷贝防止对于原始数据的修改
iris_all[target] iris_target## 可视化
sns.pairplot(datairis_all,diag_kindhist, hue target)
plt.show()从结果可以发现在2D情况下不同的特征组合对于不同类别的花的散点分布以及大概的区分能力。
3.2 箱线图
## 构建画布2x2
import matplotlib.pyplot as plt
fig, axes plt.subplots(nrows2, ncols2, figsize(10, 8))## 可视化
for i, col in enumerate(iris_features.columns):sns.boxplot(axaxes[i//2, i%2], xtarget, ycol, saturation0.5, palettepastel, datairis_all)axes[i//2, i%2].set_title(col)plt.tight_layout()
plt.show()3.3 三维散点图
from mpl_toolkits.mplot3d import Axes3Dfig plt.figure(figsize(10,8))
ax fig.add_subplot(111, projection3d)iris_all_class0 iris_all[iris_all[target]0].values
iris_all_class1 iris_all[iris_all[target]1].values
iris_all_class2 iris_all[iris_all[target]2].values
# setosa(0), versicolor(1), virginica(2)
ax.scatter(iris_all_class0[:,0], iris_all_class0[:,1], iris_all_class0[:,2],labelsetosa)
ax.scatter(iris_all_class1[:,0], iris_all_class1[:,1], iris_all_class1[:,2],labelversicolor)
ax.scatter(iris_all_class2[:,0], iris_all_class2[:,1], iris_all_class2[:,2],labelvirginica)
plt.legend()plt.show() 4 建模预测
4.1 二分类预测
## 划分为训练集和测试集
from sklearn.model_selection import train_test_split## 选择其类别为0和1的样本 不包括类别为2的样本
iris_features_part iris_features.iloc[:100]
iris_target_part iris_target[:100]## 训练集测试集7/3分
x_train, x_test, y_train, y_test train_test_split(iris_features_part, iris_target_part, test_size 0.3, random_state 2020)## 从sklearn中导入逻辑回归模型
from sklearn.linear_model import LogisticRegression
clf LogisticRegression(random_state0, solverlbfgs)# 训练模型
clf.fit(x_train, y_train)## 查看其对应的w
print(the weight of Logistic Regression:,clf.coef_)## 查看其对应的w0
print(the intercept(w0) of Logistic Regression:,clf.intercept_)## 预测模型
train_predict clf.predict(x_train)
test_predict clf.predict(x_test)from sklearn import metrics## 利用accuracy准确度评估模型效果
print(The accuracy of the Logistic Regression is:,metrics.accuracy_score(y_train,train_predict))
print(The accuracy of the Logistic Regression is:,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(figsize(8, 6))
sns.heatmap(confusion_matrix_result, annotTrue, cmapBlues)
plt.xlabel(Predicted labels)
plt.ylabel(True labels)
plt.show()结果准确度为1代表所有的样本都预测正确了绝杀
4.2 多分类预测
## 训练集测试集还是7/3分
x_train, x_test, y_train, y_test train_test_split(iris_features, iris_target, test_size 0.3, random_state 2020)## 建模
clf LogisticRegression(random_state0, solverlbfgs)## 训练模型
clf.fit(x_train, y_train)## 预测模型
train_predict clf.predict(x_train)
test_predict clf.predict(x_test)## p p(y1|x,\theta)预测模型概率
train_predict_proba clf.predict_proba(x_train)
test_predict_proba clf.predict_proba(x_test)print(The test predict Probability of each class:\n,test_predict_proba)
## 其中第一列代表预测为0类的概率第二列代表预测为1类的概率第三列代表预测为2类的概率。## 利用accuracy评估模型效果
print(The accuracy of the Logistic Regression is:,metrics.accuracy_score(y_train,train_predict))
print(The accuracy of the Logistic Regression is:,metrics.accuracy_score(y_test,test_predict))比起二分类的1略小但均大于0.9
## 查看混淆矩阵
confusion_matrix_result metrics.confusion_matrix(test_predict,y_test)
print(The confusion matrix result:\n,confusion_matrix_result)# 可视化
plt.figure(figsize(8, 6))
sns.heatmap(confusion_matrix_result, annotTrue, cmapBlues)
plt.xlabel(Predicted labels)
plt.ylabel(True labels)
plt.show()根据结果发现其在三分类的结果的预测准确度上有所下降但好在测试集还有91%这是由于versicolor1和 virginica2这两个类别的特征我们从可视化的时候也可以发现其特征的边界具有一定的模糊性边界类别混杂没有明显区分边界所有在这两类的预测上出现了一定的错误。
5 讨论
Logistic回归虽然名字里带“回归”但是它实际上是一种分类方法主要用于两分类问题即输出只有两种分别代表两个类别所以利用了Logistic函数或称为Sigmoid函数
原理的简单解释当z0时, y0.5,分类为1当z0时, y0.5,分类为0其对应的y值我们可以视为类别1的概率预测值而多分类其实就是将多个二分类的逻辑回归组合。