首页 > 编程语言 >Python 机器学习 逻辑回归算法

Python 机器学习 逻辑回归算法

时间:2024-02-17 22:01:46浏览次数:41  
标签:逻辑 Python 算法 train split test import data sklearn

 

1、理解逻辑回归

逻辑回归建立在线性回归之上。在线性回归中,模型预测的是一个连续的数值。而在逻辑回归中,线性回归的输出被输入到Sigmoid函数中,用于预测某个类别的概率。Sigmoid函数是一个S形的曲线,它将任意实数映射到(0, 1)区间,适合用来表达概率。

逻辑回归广泛应用于各种二分类问题,如垃圾邮件检测、疾病诊断、客户流失预测等。它的优点是模型简单、易于实现、计算效率高,而且输出的是概率值,这对于许多需要概率解释的应用非常有用。

2、scikit-learn

scikit-learn 是 Python 中一个强大的机器学习库,它提供了各种常用机器学习算法的简单易用的实现。使用 scikit-learn,可以快速进行数据预处理、模型训练、评估和预测,从而进行有效的机器学习分析。scikit-learn库提供了简单易用的逻辑回归实现,可以用来处理二分类和多分类问题。

1)安装命令

pip install scikit-learn

2)导入所需模块

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

3、数据集

乳腺癌数据集包含了569个样本,每个样本有30个特征。这些特征是从数字化图像中计算出来的,用于描述图像中的细胞核的特点,目标是预测肿瘤是良性还是恶性。Python 的 scikit-learn 库中,可以直接加载并使用这个数据集。通常用于二分类问题,它包含了乳腺癌肿瘤的特征和肿瘤是良性还是恶性的标签。

乳腺癌数据集的特征:

特征编号

特征名称

描述

1

mean radius

平均半径(肿瘤中心到周边点的平均距离)

2

mean texture

平均纹理(灰度值的标准差)

3

mean perimeter

平均周长

4

mean area

平均面积

5

mean smoothness

平均平滑度(局部变化的长度)

6

mean compactness

平均紧凑度(周长^2 / 面积 - 1.0)

7

mean concavity

平均凹度(轮廓凹部的严重程度)

8

mean concave points

平均凹点(轮廓凹部的数量)

9

mean symmetry

平均对称性

10

mean fractal dimension

平均分形维数(“海岸线近似” - 1)

11

radius error

半径误差

12

texture error

纹理误差

13

perimeter error

周长误差

14

area error

面积误差

15

smoothness error

平滑度误差

16

compactness error

紧凑度误差

17

concavity error

凹度误差

18

concave points error

凹点误差

19

symmetry error

对称性误差

20

fractal dimension error

分形维数误差

21

worst radius

最大半径(同1,但是是肿瘤最大半径的平均值)

22

worst texture

最大纹理(同2,但是是最大的平均值)

23

worst perimeter

最大周长

24

worst area

最大面积

25

worst smoothness

最大平滑度

26

worst compactness

最大紧凑度

27

worst concavity

最大凹度

28

worst concave points

最大凹点

29

worst symmetry

最大对称性

30

worst fractal dimension

最大分形维数

使用 scikit-learn 加载乳腺癌数据集代码如下,

from sklearn.datasets import load_breast_cancer

# 加载乳腺癌数据集
data = load_breast_cancer()

# 输出数据集的描述
print(data.DESCR)

# 获取特征和目标变量
X, y = data.data, data.target

# 输出特征名称和标签名称
print("Feature names:", data.feature_names)
print("Target names:", data.target_names)

# 输出数据集的形状
print("Shape of X (features):", X.shape)
print("Shape of y (target):", y.shape)

Wine数据集是对意大利同一地区种植的三种不同品种的酒进行化学分析的结果,包含了178个样本,每个样本有13个特征。这些特征是从酒的化学成分分析中得到的,目标是根据化学分析预测酒的品种。Python 的 scikit-learn 库中,可以直接加载并使用这个数据集。常用于分类问题的数据集,其中包含了三种不同来源的葡萄酒的化学成分分析结果。

Wine数据集的特征:

特征编号

特征名称

描述

1

Alcohol

酒精度数

2

Malic acid

苹果酸含量

3

Ash

灰分

4

Alcalinity of ash

灰分的碱性

5

Magnesium

镁含量

6

Total phenols

总酚含量

7

Flavanoids

黄烷醇类化合物含量

8

Nonflavanoid phenols

非黄烷醇类酚类化合物含量

9

Proanthocyanins

原花青素含量

10

Color intensity

颜色强度

11

Hue

色调

12

OD280/OD315 of diluted wines

稀释葡萄酒的OD280/OD315值

13

Proline

脯氨酸含量

使用 scikit-learn 加载Wine数据集代码如下,

from sklearn.datasets import load_wine

# 加载Wine数据集
wine = load_wine()

# 输出数据集概述
data_summary = {
    'feature_names': wine.feature_names,
    'target_names': wine.target_names,
    'data_shape': wine.data.shape,
    'target_shape': wine.target.shape
}

print(data_summary)

4、划分数据集

使用train_test_split函数将数据集划分为训练集和测试集,train_test_split函数是Scikit-Learn库中一个非常重要的工具。常用参数如下,

参数名

描述

arrays

需要划分的数据,通常是特征集和标签集。

例如:

X_train, X_test, y_train, y_test = train_test_split(X, y)

test_size

测试集所占的比例或数量。

例如:

train_test_split(X, y, test_size=0.2)

表示测试集占总数据集的20%。

train_size

训练集所占的比例或数量。

例如:

train_test_split(X, y, train_size=0.8)

表示训练集占总数据集的80%。

random_state

控制随机数生成器的种子。

例如:

train_test_split(X, y, random_state=42)

确保每次划分结果相同。

shuffle

是否在划分前随机打乱数据。

例如:

train_test_split(X, y, shuffle=True)

默认会打乱数据。

stratify

确保训练集和测试集具有相同的类比例。

例如:

train_test_split(X, y, stratify=y)

确保类别分布均衡。

使用代码:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

# 加载乳腺癌数据集
data = load_breast_cancer()
X = data.data
y = data.target

# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

# 输出分割结果
print("训练集样本数量:", X_train.shape[0])
print("测试集样本数量:", X_test.shape[0])
print("训练集中每类的样本比例:", [sum(y_train == i) for i in range(len(data.target_names))])
print("测试集中每类的样本比例:", [sum(y_test == i) for i in range(len(data.target_names))])

5、训练逻辑回归模型

Python中使用scikit-learn库训练逻辑回归模型是一种常见的机器学习任务。逻辑回归通常用于分类问题,特别是二分类问题。LogisticRegression类是用于训练逻辑回归模型的。它适用于二分类和多分类问题,并提供了广泛的参数来调整模型。常用参数如下,

参数描述及默认值

penalty 指定惩罚(正则化项)的种类,
可选值有'l1''l2''elasticnet''none'
默认值为'l2'
C 正则化强度的逆,较小的值指定更强的正则化。
默认值为1.0
solver 优化问题的算法,
可选值包括'newton-cg''lbfgs'
'liblinear''sag''saga'
默认值为'lbfgs'
max_iter 求解器的最大迭代次数。默认值为100
random_state 随机数生成器的种子,用于数据的随机分割,
'solver''sag''saga'
'liblinear'时使用。默认值为None。
tol 停止准则的容忍度,当损失函数的改变小于此值时,
优化过程将停止。默认值为1e-4
multi_class 多分类问题的策略,
可选值为'auto''ovr''multinomial'
默认值为'auto'
class_weight 与类相关联的权重,
可以是字典、'balanced'或None。
默认值为None。

使用代码:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 加载乳腺癌数据集
data = load_breast_cancer()
X, y = data.data, data.target

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

# 创建逻辑回归模型实例
# 使用L2正则化,'lbfgs'求解器,增加最大迭代次数以确保收敛
log_reg = LogisticRegression(penalty='l2', C=1.0, solver='lbfgs', max_iter=5000, random_state=42)

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

# 使用模型进行预测
y_pred = log_reg.predict(X_test)

# 计算并打印准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy on the breast cancer dataset: {:.2f}%".format(accuracy * 100))

参考文档:Python 机器学习 逻辑回归算法-CJavaPy

标签:逻辑,Python,算法,train,split,test,import,data,sklearn
From: https://www.cnblogs.com/tinyblog/p/18018509

相关文章

  • 【机器学习】机器学习常见算法详解第4篇:KNN算法计算过程(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻辑回归,决策树算法,集成学习,聚......
  • 100 行代码实现用户登录注册与 RESTful 接口 - 手把手教程附 Python 源码
    在开发大多数应用时,用户系统都是必不可少的部分,而我们总是需要开发围绕用户的登录,注册,获取,更新等接口。在这篇文章将带你用一百多行代码简洁地实现一套这样的用户鉴权与RESTful接口,并使用Session来处理用户的登录登出我们将使用UtilMeta框架完成接口开发,这是一个开源的Py......
  • python的xlrd读取Excel数据失败: raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_form
    使用xlrd读取Excel的xlsx格式表格里的数据,读取失败,报错:raiseXLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+';notsupported')xlrd.biffh.XLRDError:Excelxlsxfile;notsupported原因,xlrd为2.0.1版本,更新版本后,xlrd不支持xlsx格式数据的读取了,果断减低版本先卸载2.0......
  • 【数据结构】串的表示与模式匹配算法
    串串是内容受限的线性表(栈和队列是操作受限的线性表)串(string)是零个或多个任意字符组成的有限序列S:串名a1a2a3...an:串值n:串长当n=0时,表示空串,空串用\(\phi\)表示子串:一个串中任意个连续字符组成的子序列(含空串)例如“abc”的子串有“”、“a”、“b”、"c"、"ab"......
  • Python-彩色正方形
    最终成果代码importturtleast#设置画笔的大小t.pensize(20)#隐藏方向箭头t.hideturtle()#第1条边t.pencolor('red')t.forward(100)#第二条边t.pencolor('green')t.right(90)t.forward(100)#第三条边t.pencolor('blue')t.right(90)t.forward(100)......
  • Python 装饰器入门
    目录Python函数头等对象内部功能作为返回值的函数Python中的简单装饰器结论Python函数为了理解装饰器,您必须首先了解函数如何工作的一些细节。函数有很多方面,但在装饰器的上下文中,函数根据给定的参数返回一个值。下面是一个基本示例:`>>>defadd_one(number):.........
  • 对最大公约数求法和扩展欧几里得算法的简要概述
    目录1.最大公约数(gcd)1.1更相减损术时间复杂度分析1.2辗转相除法(欧几里得算法)时间复杂度分析2.最小公倍数(lcm)3.裴蜀定理(贝祖定理)3.1扩展欧几里得算法(exgcd)1.最大公约数(gcd)数论中,通常用\(d\|\a\)表示\(d\)能整除\(a\),即\(......
  • 代码随想录算法训练营第十七天 | 110.平衡二叉树 (优先掌握递归)| 404.左叶子之和 (优先
    257.二叉树的所有路径 已解答简单 相关标签相关企业 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。示例1:输入:root=[1,2,3,null,5]输出:["1->2->5","1->3"]示例2:输入:ro......
  • PID 控制 |(搬运)教程与 python 代码
    因为完全没有自动化和控制基础,所以找了很多博客都没看懂;干货|通俗易懂讲解PID,这是看的最懂的一篇()PID控制的python代码:[TBC]或许可以直接调用的python包:https://github.com/m-lundberg/simple-pid......
  • 代码随想录算法训练营第十六天 | 104.二叉树的最大深度| 559.n叉树的最大深度|222.完
    222.完全二叉树的节点个数 已解答简单 相关标签相关企业 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中......