逻辑回归|乳腺癌数据集

学习记录

1.

from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

2.

data = load_breast_cancer()
X = data.data
y = data.target

L1范式L2范式

lrl1 = LR(penalty="l1",solver = "liblinear",C = 0.5,max_iter = 1000)
lrl2 = LR(penalty="l2",solver = "liblinear",C = 0.5,max_iter = 1000)

coef_逻辑回归的重要属性,查看每个特征所对应的参数

lrl1 = lrl1.fit(X,y)
lrl1.coef_

L1会使一部分参数为0

L2范式

lrl2 = lrl2.fit(X,y)
lrl2.coef_

 画学习曲线

l1 = []
l2 = []
l1test = []
l2test = []
Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size=0.3,random_state = 420)
for i in np.linspace(0.05,1,19):
    lrl1 = LR(penalty = 'l1',solver = 'liblinear',C = i,max_iter=1000)
    lrl2 = LR(penalty = 'l2',solver = 'liblinear',C = i,max_iter=1000)
    lrl1 = lrl1.fit(Xtrain,Ytrain)
    l1.append(accuracy_score(lrl1.predict(Xtrain),Ytrain))
    l1test.append(accuracy_score(lrl1.predict(Xtest),Ytest))
    lrl2 = lrl2.fit(Xtrain,Ytrain)
    l2.append(accuracy_score(lrl2.predict(Xtrain),Ytrain))
    l2test.append(accuracy_score(lrl2.predict(Xtest),Ytest))
graph = [l1,l2,l1test,l2test]
color = ['green','black','lightgreen','gray']
label = ['L1','L2','L1test','L2test']

plt.figure(figsize=(6,6))
for i in range(len(graph)):
    plt.plot(np.linspace(0.05,1,19),graph[i],color[i],label=label[i])
plt.legend(loc=4)
plt.show()

至少在我们的乳腺癌数据集下,两种正则化的结果区别不大。但随着C的逐渐变大,正则化的强度越来越小,模型在训练集和测试集上的表现都呈上升趋势,直到C=0.8左右,训练集上的表现依然在走高,但模型在未知数据集上的表现开始下跌,这时候就是出现过拟合。默认使用l2,效果不好试试l1

<think>好的,我现在需要帮用户找到关于使用逻辑回归乳腺癌数据集上进行实战分析的教程或案例,特别是用Python和sklearn实现的。首先,我应该回忆一下用户提供的引用内容,看看哪些相关。 用户提供的引用中有几个提到乳腺癌数据集逻辑回归的应用。比如引用[4]和[5]直接提到了用逻辑回归乳腺癌数据集进行分类预测。引用[2]和[3]是关于sklearn实现逻辑回归的教程,其中可能包含相关代码示例。引用[1]则提供了加载乳腺癌数据集的代码。 接下来,我需要整合这些信息,给用户一个清晰的步骤指南。首先,应该从加载数据集开始,然后进行数据预处理,比如划分训练集和测试集,可能还需要标准化数据。接着,使用sklearn中的LogisticRegression模型进行训练,然后评估模型性能,比如准确率、混淆矩阵、分类报告等。最后,可能还需要可视化结果,如ROC曲线或特征重要性。 需要注意的是,用户希望看到具体的代码示例,所以每一步都应该有对应的代码块。同时,要确保代码符合规范,比如使用正确的导入语句,正确的方法调用等。例如,加载乳腺癌数据集应该使用load_breast_cancer(),然后转换为DataFrame以便处理。 另外,用户提供的引用[3]提到了非线性逻辑回归,可能需要多项式特征或正则化,但用户的问题可能更关注基础应用,所以可能先集中在线性逻辑回归上,再简要提及高级技巧。 可能还需要考虑数据标准化,因为逻辑回归对特征的尺度敏感,所以StandardScaler的使用是必要的。在模型评估部分,除了准确率,还应包括精确率、召回率等指标,引用[4]中的案例可能有相关代码。 最后,生成相关问题的时候,要围绕逻辑回归的应用、数据预处理、模型评估、优化方法等展开,确保问题有针对性,帮助用户进一步学习。</think>### 使用逻辑回归分析乳腺癌数据集的实战教程(Python + sklearn) 以下是基于威斯康辛州乳腺癌数据集逻辑回归分类预测完整流程,结合代码和关键分析步骤: --- #### 1. **导入库并加载数据集** ```python import pandas as pd import numpy as np from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, confusion_matrix, classification_report, roc_auc_score # 加载乳腺癌数据集 data = load_breast_cancer() X = pd.DataFrame(data.data, columns=data.feature_names) # 特征矩阵 y = pd.Series(data.target) # 标签(0=恶性,1=良性) ``` --- #### 2. **数据探索与可视化** - **输出数据基本信息**: ```python print(f"特征数量: {X.shape[1]}, 样本数量: {X.shape[0]}") print(f"类别分布:\n{y.value_counts()}") # 查看是否类别均衡 ``` 输出示例: ``` 特征数量: 30, 样本数量: 569 类别分布: 1 357 0 212 ``` - **可视化特征分布**(以两个特征为例): ```python import matplotlib.pyplot as plt plt.scatter(X['mean radius'], X['mean texture'], c=y, cmap='coolwarm') plt.xlabel('Mean Radius') plt.ylabel('Mean Texture') plt.title('乳腺癌数据集特征分布') plt.show() ``` --- #### 3. **数据预处理** - **划分训练集和测试集**: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` - **标准化数据**(逻辑回归对特征尺度敏感): ```python scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) ``` --- #### 4. **训练逻辑回归模型** ```python model = LogisticRegression(penalty='l2', C=1.0, solver='liblinear') # L2正则化防止过拟合 model.fit(X_train_scaled, y_train) ``` --- #### 5. **模型评估** - **预测与指标计算**: ```python y_pred = model.predict(X_test_scaled) y_proba = model.predict_proba(X_test_scaled)[:, 1] # 预测概率 # 准确率 accuracy = accuracy_score(y_test, y_pred) # 混淆矩阵 cm = confusion_matrix(y_test, y_pred) # AUC-ROC auc = roc_auc_score(y_test, y_proba) print(f"准确率: {accuracy:.4f}") print(f"AUC-ROC: {auc:.4f}") print("分类报告:\n", classification_report(y_test, y_pred)) ``` 输出示例: ``` 准确率: 0.9737 AUC-ROC: 0.9947 分类报告: precision recall f1-score support 0 0.97 0.95 0.96 43 1 0.97 0.98 0.98 71 accuracy 0.97 114 ``` --- #### 6. **关键分析** - **特征重要性**(逻辑回归的系数): ```python coef_df = pd.DataFrame({'Feature': data.feature_names, 'Coefficient': model.coef_[0]}) coef_df = coef_df.sort_values(by='Coefficient', ascending=False) print(coef_df.head(10)) # 输出对分类贡献最大的前10个特征 ``` 输出示例: ``` Feature Coefficient 27 worst concave points -1.234 22 worst perimeter -1.128 7 mean concave points -0.945 ... ``` --- #### 7. **优化建议** 1. **处理类别不均衡**:若数据类别不均衡,可尝试过采样(如SMOTE)或调整`class_weight`参数[^4]。 2. **特征选择**:使用递归特征消除(RFE)减少冗余特征,提高模型泛化能力[^2]。 3. **超参数调优**:通过网格搜索(GridSearchCV)优化正则化强度`C`和正则化类型(L1/L2)[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值