Logistic回归——用于二分类。使用python在乳腺癌数据集上应用Logistic回归进行预测并分析。1、导入需要用到的包2、加载数据,并显示其属性特征3、把数据集进行分割,其中20%为测试集。4、Logistic回归模型的建立、训练,并输出训练集精度和泛化精度。并把结果截图保存。5、C=1 的默认值给出了相当好的性能,在训练集和测试集上都达到 95% 的精度。 但由于训练集和测试集的性能非常接近,所以模型很可能是欠拟合的。 我们尝试增大 C 来拟合一个更灵活的模型: C=10时,Logistic回归模型的建立、训练,并输出训练集精度和泛化精度。 C=100时,Logistic回归模型的建立、训练,并输出训练集精度和泛化精度。 C=0.01时,Logistic回归模型的建立、训练,并输出训练集精度和泛化精度。6、测试不同的C值对应的测试集的泛化误差,找出最佳的C值。
时间: 2024-02-03 13:13:48 浏览: 96
Python 乳腺癌数据集二分类预测 机器学习 深度学习 网格搜索+logistic逻辑回归+神经网络+SVM+KNN+可视化
4星 · 用户满意度95%
好的,以下是代码实现及注释解析:
```python
# 1.导入需要用到的包
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
# 2.加载数据,并显示其属性特征
data = pd.read_csv('breast_cancer_data.csv')
print(data.head()) # 查看前5行数据
print(data.describe()) # 显示数据的统计信息
# 3.把数据集进行分割,其中20%为测试集
X = data.iloc[:, :-1] # 取出特征值
y = data.iloc[:, -1] # 取出标签值
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 4.1.C=1 的默认值给出了相当好的性能,在训练集和测试集上都达到 95% 的精度。
model = LogisticRegression(C=1, max_iter=10000) # 初始化Logistic回归模型
model.fit(X_train, y_train) # 训练模型
train_acc = model.score(X_train, y_train) # 计算训练集精度
test_acc = model.score(X_test, y_test) # 计算测试集精度
print(f"当C=1时,训练集精度为{train_acc:.2f},测试集精度为{test_acc:.2f}") # 输出训练集精度和测试集精度
# 4.2.C=10时的结果
model = LogisticRegression(C=10, max_iter=10000)
model.fit(X_train, y_train)
train_acc = model.score(X_train, y_train)
test_acc = model.score(X_test, y_test)
print(f"当C=10时,训练集精度为{train_acc:.2f},测试集精度为{test_acc:.2f}")
# 4.3.C=100时的结果
model = LogisticRegression(C=100, max_iter=10000)
model.fit(X_train, y_train)
train_acc = model.score(X_train, y_train)
test_acc = model.score(X_test, y_test)
print(f"当C=100时,训练集精度为{train_acc:.2f},测试集精度为{test_acc:.2f}")
# 4.4.C=0.01时的结果
model = LogisticRegression(C=0.01, max_iter=10000)
model.fit(X_train, y_train)
train_acc = model.score(X_train, y_train)
test_acc = model.score(X_test, y_test)
print(f"当C=0.01时,训练集精度为{train_acc:.2f},测试集精度为{test_acc:.2f}")
# 5.测试不同的C值对应的测试集的泛化误差,找出最佳的C值
C_values = [0.001, 0.01, 0.1, 1, 10, 100, 1000]
test_accs = []
for C in C_values:
model = LogisticRegression(C=C, max_iter=10000)
model.fit(X_train, y_train)
test_acc = model.score(X_test, y_test)
test_accs.append(test_acc)
plt.plot(C_values, test_accs)
plt.xscale('log')
plt.xlabel('C')
plt.ylabel('测试集精度')
plt.show()
```
注释:
1. 首先,我们导入需要的包,其中 `numpy` 、 `pandas` 、 `sklearn` 、 `matplotlib.pyplot` 都是常用的数据分析和机器学习库。
2. 加载数据,我们使用 `pandas` 库中的 `read_csv` 函数读取 csv 文件,并使用 `head` 函数和 `describe` 函数查看前5行数据和数据的统计信息。
3. 将数据集划分为训练集和测试集,其中 `train_test_split` 函数可以随机将数据集划分为训练集和测试集,并且可以指定测试集的比例和随机种子。
4. 根据要求,我们建立了4个不同的 Logistic 回归模型,分别以不同的 C 值为参数,并训练模型。在训练完模型后,我们计算了训练集精度和测试集精度,并输出结果。需要注意的是,我们对模型进行了最大迭代次数的设定,以解决模型收敛速度过慢的问题。
5. 最后,我们测试了不同的 C 值对应的测试集精度,并将结果绘制成图表,以便我们找到最佳的 C 值。其中,我们使用 `plt.plot` 函数绘制图表,并使用 `plt.xscale` 函数将 x 轴的刻度设定为对数刻度,以便更好地展示数据。
阅读全文