简单的逻辑回归案例

        利用鸢尾花数据集,根据鸢尾花的特征(如花萼长度、花萼宽度、花瓣长度和花瓣宽度)预测鸢尾花的种类(Setosa、Versicolor 或 Virginica),来实现一个简单的逻辑回归案例。

 1、首先我们导入鸢尾花数据集并将其可视化展示:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import datasets

# 加载鸢尾花数据集
iris = datasets.load_iris()
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
iris_df['species'] = iris.target

# 将特征名称转换为中文
iris_df.columns = ['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度', '种类']

# 可视化
sns.pairplot(iris_df, hue='种类')
plt.show()

        鸢尾花一共分为三类,并用三种不同的颜色标注了出来,(影响因素为了便于观察我用中文翻译了一下),由图可以看出任意两种因素的组合都能比较清楚的将三种鸢尾花分开。

  2、有了数据之后,我们要对其进行简单的数据集划分:

from sklearn.preprocessing import StandardScaler

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 数据预处理
# 使用StandardScaler标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

        具体的数据集划分各参数含义可以参考我上一次的文章。

  3、划分好了数据集之后,我们需要创建一个逻辑回归模型,并且开始训练。

from sklearn.linear_model import LogisticRegression

# 创建逻辑回归模型
model = LogisticRegression()

# 训练模型
model.fit(X_train, y_train)

         注意这里用的是LogisticRegression模型,而不是上一篇文章中使用的LinearRegression

         简单介绍一下二者的区别:

        用途

         LinearRegression():用于回归问题,目标是预测连续值(如房价、温度等)。
         LogisticRegression():用于分类问题,目标是预测离散类别(如是/否、猫/狗等)。

        输出类型:

        LinearRegression():输出预测的连续数值。
        LogisticRegression():输出概率值(0到1之间),通常通过阈值(如0.5)将其转换为分类标签。

        如果还不清楚的话举几个简单的使用场景:

        LinearRegression()
        房价预测:根据房屋特征(如面积、卧室数量、位置等)预测房价。
        销售预测:分析过去的销售数据,预测未来的销售额。
        温度预测:根据历史气象数据预测未来的温度变化。
        成本分析:估算生产成本与销售量之间的关系。

        LogisticRegression()
        客户流失预测:判断客户是否会流失,基于历史数据(如消费习惯、服务评价等)。
        疾病预测:根据患者的健康指标(如血压、体重、年龄等)判断是否患有某种疾病(如糖尿病)。
        信用评分:评估借款人是否会违约,基于财务数据(如收入、债务、信用历史等)。
        垃圾邮件分类:判断一封电子邮件是否为垃圾邮件,基于特征(如关键词、发件人、邮件长度等)。

 4、训练完毕后对模型进行预测和评估

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
# 进行预测
y_pred = model.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

print("预测结果:", y_pred)
print("实际结果:", y_test)
print("准确率:", accuracy)
print("混淆矩阵:\n", conf_matrix)
print("分类报告:\n", class_report)

        混淆矩阵表示分类模型对三类样本的预测结果。矩阵的行表示实际类别,列表示预测类别,这里所表示的含义是:

        第一行 [10, 0, 0]:

        10:实际类别为0的样本中,有10个被正确预测为类别0(真正例 TP)。
         0:实际类别为0的样本中,没有被错误预测为类别1(假正例 FP)。
         0:实际类别为0的样本中,没有被错误预测为类别2(假正例 FP)。


        第二行 [0, 9, 0]:

        0:实际类别为1的样本中,没有被错误预测为类别0(假负例 FN)。
        9:实际类别为1的样本中,有9个被正确预测为类别1(真正例 TP)。
        0:实际类别为1的样本中,没有被错误预测为类别2(假正例 FP)。


        第三行 [0, 0, 11]:

         0:实际类别为2的样本中,没有被错误预测为类别0(假负例 FN)。
         0:实际类别为2的样本中,没有被错误预测为类别1(假负例 FN)。
        11:实际类别为2的样本中,有11个被正确预测为类别2(真正例 TP)。

        分类报告是一种用于评估分类模型性能的工具,它提供了各个类别的详细指标,包括准确率、召回率和F1分数,具体含义是:

        Precision(精确率):预测为正类中真正为正类的比例。高精确率意味着错误预测少。

        Recall(召回率):实际为正类中被正确预测为正类的比例。高召回率意味着能捕捉到大部分正类样本。

        F1-Score:精确率和召回率的调和平均值,综合考虑了这两个指标。

        Support(支持度):每个类别在测试集中实际的样本数量。

        Accuracy(准确率):所有正确预测占总预测的比例。

        Macro Avg(宏平均):各类别指标的平均值,不考虑类别样本的数量。

        Weighted Avg(加权平均):根据每个类别的样本数量加权的平均值,反映整体表现。

5、预测结果可视化

# 8. 可视化结果(随机使用两个特征进行可视化,这里使用第一个和第三个特征)
plt.figure(figsize=(10, 6))
plt.scatter(X_test[:, 0], X_test[:, 2], c=y_pred, cmap='viridis', marker='o', edgecolor='k', s=100)
plt.title('逻辑回归分类结果')
plt.xlabel('花萼长度')
plt.ylabel('花瓣长度')
plt.grid()
plt.show()

        可以看出用两个特征还是很容易判断这三种不同鸢尾花的,感兴趣的也可以使用另外两种影响因素进行可视化,看看情况如何。

6、总结:

        通过两次实验我发现这种训练模型的基本套路都是首先创建数据集,对数据集进行预处理并划分好训练集等,在选择合适的模型进行训练,最后对模型进行预测和评估。

        如果改文章对您有帮助的话请点赞鼓励一下,如果有纰漏或者错误,也请在评论区指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值