python代码实现逻辑回归logistic原理

Python代码实现逻辑回归(Logistic回归)原理

概述

Logistic回归是一种二元分类算法,常用于预测用户在某项活动中是否会产生某种行为。它的名字源于其使用的sigmoid函数,该函数可以将任何实数映射到0到1之间的值,因此非常适合概率估计。

本篇攻略将详细讲解如何使用Python实现Logistic回归,包括数据处理、模型训练、参数调整等过程。

数据预处理

首先,我们需要准备数据集。假设我们有一个名为“data.csv”的数据集,它的格式如下:

x1,x2,y
1.2,3.4,0
5.8,2.3,1
...

其中,第一列和第二列分别是输入特征x1和x2,第三列是对应的标签y。我们可以使用Pandas库中的read_csv()方法来读取数据集:

import pandas as pd

data = pd.read_csv('data.csv')

接下来,我们需要将数据集的输入特征和标签分离出来,并将它们转换为Numpy数组的形式:

import numpy as np

X = np.array(data[['x1', 'x2']])
y = np.array(data['y'])

此时,X和y分别是输入特征和标签的Numpy数组。

为了方便后续处理,我们还需要对数据进行标准化处理,即将每个输入特征减去其均值并除以其标准差:

mean = np.mean(X, axis=0)
std = np.std(X, axis=0)

X = (X - mean) / std

模型训练

接下来,我们可以使用Scikit-learn库中的LogisticRegression类来训练模型。代码如下:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X, y)

这样,我们就得到了训练好的Logistic回归模型。

参数调整

经过训练,我们可以使用模型的coef_属性查看每个特征对应的权重(系数):

print(model.coef_)

此时,我们可以选择通过改变参数来提高模型的准确率。其中,最常见的参数是正则化强度C。正则化是用于防止模型过拟合的一种技术,C的值越小,正则化的强度越高,模型的泛化能力也越强。

因此,我们可以使用GridSearchCV类来对C的值进行网格搜索,以找到最佳的超参数配置:

from sklearn.model_selection import GridSearchCV

params = {'C': [0.1, 1, 10, 100]}
grid = GridSearchCV(LogisticRegression(), params, cv=5)
grid.fit(X, y)

print(grid.best_params_)

此时,我们得到的最佳超参数配置可以用来训练更准确的模型。

示例说明

以下是两个示例的说明,演示如何使用Python实现Logistic回归模型。

示例1:波士顿房价预测

假设我们有一个数据集,其中包含了波士顿地区的房屋租金和相关特征。我们可以使用Logistic回归模型来预测某个房屋的租金是否高于平均值,以此来判断其是否溢价。

首先,我们需要加载数据集:

from sklearn.datasets import load_boston

boston = load_boston()
X, y = boston.data, boston.target

接下来,我们需要对数据进行处理:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X = scaler.fit_transform(X)

y = (y > y.mean()).astype('int')

此时,X和y分别是输入特征和标签的Numpy数组。

我们可以使用train_test_split()方法将数据集分为训练集和测试集:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

接下来,我们可以使用LogisticRegression类来训练模型:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X_train, y_train)

训练好模型后,我们可以使用准确率(accuracy)、精确率(precision)、召回率(recall)和F1值(F1 score)等指标来评估模型的性能:

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print('Accuracy:', accuracy)
print('Precision:', precision)
print('Recall:', recall)
print('F1 score:', f1)

最后,我们可以使用matplotlib库将模型的决策边界可视化:

import matplotlib.pyplot as plt

coef = model.coef_.ravel()

plt.scatter(X[:, 5], X[:, 12], c=y, cmap='bwr')
x_axis = np.linspace(X[:, 5].min(), X[:, 5].max(), 10)
y_axis = -(coef[5] * x_axis + model.intercept_) / coef[12]
plt.plot(x_axis, y_axis)
plt.show()

示例2:鸢尾花种类预测

假设我们有一个数据集,其中包含了鸢尾花的花萼长度、花萼宽度、花瓣长度和花瓣宽度等特征,我们可以使用Logistic回归模型来预测其种类。

首先,我们需要加载数据集:

from sklearn.datasets import load_iris

iris = load_iris()
X, y = iris.data, iris.target

接下来,我们需要对数据进行处理:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X = scaler.fit_transform(X)

y = (y > 0).astype('int')

此时,X和y分别是输入特征和标签的Numpy数组。

我们可以使用train_test_split()方法将数据集分为训练集和测试集:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

接下来,我们可以使用LogisticRegression类来训练模型:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X_train, y_train)

训练好模型后,我们可以使用准确率(accuracy)、精确率(precision)、召回率(recall)和F1值(F1 score)等指标来评估模型的性能:

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print('Accuracy:', accuracy)
print('Precision:', precision)
print('Recall:', recall)
print('F1 score:', f1)

最后,我们可以使用matplotlib库将模型的决策边界可视化:

import matplotlib.pyplot as plt

coef = model.coef_.ravel()

plt.scatter(X[:, 0], X[:, 1], c=y, cmap='bwr')
x_axis = np.linspace(X[:, 0].min(), X[:, 0].max(), 10)
y_axis = -(coef[0] * x_axis + model.intercept_) / coef[1]
plt.plot(x_axis, y_axis)
plt.show()

总结

本篇攻略介绍了如何使用Python实现Logistic回归模型,包括数据预处理、模型训练、参数调整等过程,并通过两个示例进行了演示。此外,我们还讨论了正则化强度C的作用,并使用GridSearchCV类对其进行了网格搜索。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python代码实现逻辑回归logistic原理 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • python开发之字符串string操作方法实例详解

    Python开发之字符串String操作方法实例详解 字符串(string) 在 Python 中是一个非常常用的数据类型。在本文中,我们将详细探讨 Python 字符串的操作方法,包括字符串读取、截取、查找、替换、拼接等常用操作。 字符串读取 在 Python 中,我们可以通过索引下标(index)的方式来读取字符串中的字符。字符串下标从0开始,逐一向后递…

    python 2023年6月5日
    00
  • python多进程下实现日志记录按时间分割

    实现Python多进程下的日志记录按时间分割,我们可以采用以下步骤: 步骤一:安装日志记录工具 首先,我们需要安装Python标准库中的logging模块,通过该模块可以很方便地进行日志记录和管理。 import logging 步骤二:设置日志记录器 我们可以创建一个日志记录器logger,并配置其相关的属性,如日志记录级别和日志输出格式。 logger …

    python 2023年6月2日
    00
  • 关于Pycharm安装第三方库超时 Read time-out的问题

    当在Pycharm中安装第三方库时,有时会出现“Read timed out”的错误,这是因为在下载过程中连接超时导致的。以下是解决此问题的完整攻略。 问题原因 Pycharm在安装第三方库时,会从PyPi(Python Package Index)进行下载。但是由于网络原因或服务器端限制,可能会导致下载过程中连接超时。 解决方法 方法一:更改PyPi镜像源…

    python 2023年5月13日
    00
  • python实现贪吃蛇小游戏

    Python实现贪吃蛇小游戏是一个非常好的练手项目,通过这个项目,可以加深对Python编程基础的理解和掌握,同时也可以提升编程能力和逻辑思维能力。下面是完整攻略: 游戏规则 贪吃蛇是一款非常经典的小游戏,游戏规则如下: 蛇的身体由一个个方块组成,蛇头在最前面,蛇的初始长度为3个方块 当蛇头碰到了边界或者碰到了自己的身体时,游戏结束 蛇头碰到食物后,蛇的长度…

    python 2023年6月3日
    00
  • 利用Python+Excel制作一个视频下载器

    下面是详细的Python+Excel制作视频下载器的实例教程: 制作视频下载器 实现思路 利用Python的request模块向视频分享网站发出请求,并获取到视频的真实下载链接 将获取到的下载链接写入Excel表格中 利用Excel表格中的下载链接,利用迅雷或其他下载器实现批量下载 具体实现 1.分析网页源代码 首先,我们需要分析视频分享网站中视频下载链接的…

    python 2023年5月13日
    00
  • 在 Python 中使用通配符匹配字符串的方法

    在 Python 中,我们可以使用通配符来匹配字符串。通配符是一种特殊的字符,可以代表任意字符或一组字符。Python 提供了多种方法来实现通配符匹配,下面将详细讲解这些方法。 1. 使用 fnmatch 模块 Python 的 fnmatch 模块提供了 fnmatch() 和 fnmatchcase() 两个函数,可以用于通配符匹配。这两个函数都接受两个…

    python 2023年5月14日
    00
  • Python加载文件内容的两种实现方式

    当我们需要在Python代码中加载文件内容时,通常有两种方法来实现。 1. 使用with语句读取文件 使用with语句读取文件是一种常用的方法,它可以保证在读取文件结束后,文件会被自动关闭。具体步骤如下: with open(‘sample.txt’, ‘r’) as f: content = f.read() print(content) 上面的代码中,我…

    python 2023年6月3日
    00
  • Python import自定义模块方法

    Python中的import语句可以帮助我们导入其他模块的方法、函数和变量等,以达到代码重用的目的。其中,自定义模块是指用户自行编写的模块。下面就来介绍一下Python导入自定义模块的方式。 自定义模块的创建 在介绍导入自定义模块的方法之前,我们先来看一下如何创建一个自定义模块。以创建一个名为my_module的模块为例,创建步骤如下: 在项目目录下创建一个…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部