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开发任意表达式求值全功能示例

    在Python中,我们可以使用eval()函数来求解任意表达式。eval()函数接受一个字符串作为参数,将其作为Python表达式求值,并返回结果。本文将详细介绍如何使用eval()函数实现任意表达式求值的全功能示例。 实现基本的任意表达式求值 以下是一个实现基本的任意表达式求值的示例: expression = input("请输入一个表达式:&…

    python 2023年5月14日
    00
  • 关于python中第三方库交叉编译的问题

    关于Python中第三方库交叉编译的问题,我们需要考虑到两方面问题:第一是如何在本地编译出适用于指定平台的.so/.dll二进制文件,第二是如何在指定平台上使用这些编译好的二进制文件。以下是两种常见的解决方案及其示例说明。 解决方案一:使用交叉编译工具链 交叉编译指的是在运行平台不同于本地编译平台的情况下,将程序编译为目标平台可执行代码的过程。在Python…

    python 2023年5月13日
    00
  • Python 异常的捕获、异常的传递与主动抛出异常操作示例

    Python 异常处理 在Python中,异常处理非常重要。在程序运行时可能会出现很多种错误,有些错误是我们能够预见的,比如除以0的错误,有些错误是我们无法预见的,比如获取一个不存在的文件。无论是哪种错误,都有可能导致程序的崩溃。 为了避免这种情况发生,我们需要对可能出现的异常进行捕获和处理。 Python 异常的捕获 Python的异常处理方式与其他语言有…

    python 2023年5月13日
    00
  • python中单例常用的几种实现方法总结

    Python中单例常用的几种实现方法总结 在Python中,单例指的是在一个进程中,某个类仅有一个实例,并提供一个全局的访问点。 本文将总结几种Python中单例模式的实现方法,包括: 使用装饰器 使用类 使用元类 使用装饰器 通过装饰器来实现单例模式,可以避免在类中编写额外的代码。该装饰器可以应用于几乎所有的类。 def singleton(cls): i…

    python 2023年5月19日
    00
  • python实现dict版图遍历示例

    下面是详细的讲解“Python实现dict版图遍历示例”的攻略。 简介 在Python中,字典是一种非常常用的数据类型。我们可以通过字典实现图遍历的相关操作。在基于字典实现的图中,每个键代表一个节点,对应的值则是它相邻节点的列表。接下来我们将通过两个示例来演示如何基于字典实现图遍历。 示例一:广度优先遍历 问题描述 我们有一个图,如下所示: A: B, C …

    python 2023年6月6日
    00
  • 工匠回忆(二)

    接上文 4、条件分支控制流   避免分支嵌套,异常放在代码片段最前面   4.1、归约函数   4.2、条件表达式的封装避免过长而导致可读性下降   4.3、德摩根定律   4.4、and、or优先级   4.5、or短路效应   4.6、消失的分支     4.6.1、二分查找算法     4.6.2、字典算法   5、异常错误处理   无需多言   6、…

    python 2023年5月4日
    00
  • Python中列表索引 A[ : 2 ]与A[ : , 2]的区别说明

    在Python中,列表索引是一种常用的操作,可以用来访问和修改列表中的元素。在列表索引中,A[:2]和A[:,2]是两种常见的用法,它们的区别如下: A[:2]表示访问列表A中前两个元素,返回一个包含前两个元素的新列表。 A[:,2]表示访问列表A中第三列的所有元素,返回一个包含第三列所有元素的新列表。 下面是两个示例说明: 示例1:访问前两个元素 # 定义…

    python 2023年5月13日
    00
  • 解决python3.5 正常安装 却不能直接使用Tkinter包的问题

    针对 Python3.5 正常安装却不能直接使用 Tkinter 包的问题,可以按照以下步骤进行解决: 问题分析 在 Python3.5 中,Tkinter 包已经默认安装,但在某些情况下可能无法正常使用,这是因为 Tkinter 包本身依赖于 Tcl/Tk 库,如果 Tcl/Tk 库没有正确安装或者环境变量没有配置好,Tkinter 包就无法直接使用。 解…

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