乳腺癌数据是sklearn中自带的数据集,需要通过相关特征对是否患有乳腺癌进行分类。
数据清洗与建模
首先加载相关库和相关数据
py
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
import numpy as np
import pandas as pd
#加载数据
bcdata = load_breast_cancer()
# 转成dataFrame格式,方便查看
df_data = pd.DataFrame(bcdata.data, columns=bcdata.feature_names)
df_data['targe'] = bcdata.target
df_data.head()
通过运行的结果可以看出这个数据集有30个自变量,包括半径,紧密度,面积等相关数据,并同时包括对应指标的平均值,最大值,最小值。而target列为结果列,0 表示恶性,1 表示良性。数据集共569条记录,均没有缺失数据
接下来将数据分为测试集和训练集
py
from sklearn.model_selection import train_test_split
X_train,X_test,y_train, y_test=train_test_split(bcdata.data,bcdata.target,test_size=0.3)
在这里直接使用sklearn中的逻辑回归LogisticRegression()建模,其官网地址为https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html,其语法和参数为:
py
model = LogisticRegression(penalty='l2',
dual=False,
tol=0.0001,
C=1.0,
fit_intercept=True,
intercept_scaling=1,
class_weight=None,
random_state=None,
solver='lbfgs',
max_iter=100,
multi_class='auto',
verbose=0,
warm_start=False,
n_jobs=None,
l1_ratio=None)
对应的参数为:
- penalty:指定惩罚(正则化项)类型,用于避免过拟合,可以是 'l1'、'l2'、'elasticnet' 或 'none'。
- C:正则化强度的倒数,较小的值指定更强的正则化。
- fit_intercept:指定是否应该向决策函数中添加常数项(也称截距)。
- intercept_scaling:仅在使用求解器 'liblinear' 且
fit_intercept
为 True 时有用。当特征值相差很大时,此参数有助于稳定 'liblinear' 的收敛。 - class_weight:用于标示各个类别的权重,通常用于处理类别不平衡的问题。如果不设置,则所有类的权重都为 1。
- random_state:是随机数生成器的种子。在需要重现结果的情况下用于初始化中心。
- solver:指定在优化问题中使用的算法,如 'liblinear'、'newton-cg'、'lbfgs'、'sag' 和 'saga'。
- max_iter:求解器内部迭代的最大次数,即优化算法的迭代次数。
- multi_class:如果是多类(非二分类)问题,则指定用于多类策略的算法,可以是 'ovr'(一对剩余)或 'multinomial'。
- verbose:对于某些求解器,正整数的
verbose
参数可以用于显示求解器中的进程信息。 - warm_start:设为True时,使用前一个调用的解决方案作为初始化,否则,只是擦除前一个解决方案。
- n_jobs:用于指定并行作业的数量。
None
意味着1,而-1意味着使用所有处理器。 - l1_ratio:仅在
penalty='elasticnet'
时使用,这是Elastic-Net混合参数,其中 0 <= l1_ratio <= 1。
本例中是最简单的二分类,所以直接调用,参数直接采用默认的参数
py
clf = LogisticRegression()
clf.fit(X_train,y_train)
这里直接运行会发现会有一个警告:
这是因为使用了默认的lbfgs算法且参数的迭代次数达到了限制(默认max_iter=100),但是两次迭代参数变化还是比较大,仍然没有在一个很小的阈值以下,这就叫没有收敛。
这个时候的选择有 :1.忽略, 2.增大最大迭代次数, 3.更换其他的模型或者那个参数solver, 4.将数据进行预处理,提取更有用的特征。这里重点是讲解逻辑回归的使用,所以我们直接忽略不细聊具体的参数
逻辑回归模型评价
逻辑回归模型是一个分类模型,所以采用一般的分类模型评价指标即可。常用的分类模型评价指标可参考https://blog.csdn.net/qq_42692386/article/details/147896278
这里直接使用sklearn中的score函数,对于分类任务其返回的是准确率
py
score=clf.score(X_test,y_test)
score
#结果为0.9122807017543859
也可以直接计算准确率,和score函数结果一致
py
print( "模型准确率:",(clf_y_predict== y_test).sum()/len(y_test))
