良/恶性乳腺癌肿瘤预测

import pandas as pd
import requests
from io import StringIO
import numpy as np
from sklearn.model_selection import train_test_split #分割数据
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
# 从网页读取文件
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data"
response = requests.get(url)
data = response.text
#创建特征列表
columns=["样本编号","肿块厚度","细胞大小均匀性","细胞形状均匀性","边缘黏性","单上皮细胞大小","裸核","染色体","正常核","有丝分裂","肿瘤性质"]
brdata = pd.read_csv(StringIO(data), names=columns)
print(brdata.shape)
#将缺失值数据替换为标准缺失值
data =brdata.replace('?',np.nan)
#丢弃带有缺失值的数据
data = data.dropna(how='any')
#输出data的数据量与维度
print(data.shape)

#将数据分为训练集和测试集 20%用于测试集80%用于训练集
X_train, X_test, y_train, y_test = train_test_split(data[columns[1:10]],data[columns[10]], test_size=0.2)
#查验训练,测试样本的数量和类别分布
print(X_train.shape,y_train.shape)
print(X_test.shape,y_test.shape)

#将特征值数据标准化,保证每个维度的特征数据方差为1,均值为0
scaler = StandardScaler()
X_train_scalered = scaler.fit_transform(X_train) #训练集将训练集的数据标准化
X_test_scalered = scaler.transform(X_test)#测试集将测试集的数据标准化

#使用LogisticRegression模型建立模型创建模型
lr = LogisticRegression(solver='liblinear')#使用liblinear作为求解器使用liblinear算法
lr.fit(X_train_scalered, y_train)#使用训练集数据拟合模型训练模型 fit()方法 fit计算平均值与标准差
#计算模型在测试集上的准确度使用测试集数据预测模型的结果
print("LogisticRegression模型准确度为:R model accuracy on test set: ", lr.score(X_test_scalered, y_test))

#调用SGDClassifier模型建立模型
sgdc= SGDClassifier(max_iter=1000)#最大迭代次数迭代次数
sgdc.fit(X_train_scalered, y_train)
print("SGDClassifier模型准确度为:R model accuracy on test set: ", sgdc.score(X_test_scalered, y_test))

#调用KNeighborsClassifier模型建立模型
knnc= KNeighborsClassifier(n_neighbors=6)#邻域数量邻居数量
knnc.fit(X_train_scalered, y_train)
print("KNeighborsClassifier模型准确度为:R model accuracy on test set: ", knnc.score(X_test_scalered, y_test))#拟合模型

#调用SVC模型建立模型
svc = SVC(kernel='linear', C=0.025)#线性核函数线性核函数C参数
svc.fit(X_train_scalered, y_train)
print("SVC模型准确度为:R model accuracy on test set: ", svc.score(X_test_scalered, y_test))

#调用GaussianNB模型建立模型
gnb = GaussianNB()
gnb.fit(X_train_scalered, y_train)
print("GaussianNB模型准确度为:R model accuracy on test set: ", gnb.score(X_test_scalered, y_test))

#调用DecisionTreeClassifier模型建立模型
dtc = DecisionTreeClassifier(max_depth=5)
dtc.fit(X_train_scalered, y_train)
print("DecisionTreeClassifier模型准确度为:R model accuracy on test set: ", dtc.score(X_test_scalered, y_test))

#调用RandomForestClassifier模型建立模型
rfc = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=0)#随机森林分类器决策树数量决策树的深度随机种子
rfc.fit(X_train_scalered, y_train)
print("RandomForestClassifier模型准确度为:R model accuracy on test set: ", rfc.score(X_test_scalered, y_test))

#使用测试集数据预测模型的结果使用测试集数据预测模型的结果
rfc_y= rfc.predict(X_test_scalered)
print(classification_report(y_test, rfc_y,target_names=['Malignant','Benign']))#分类报告打印分类报告 Malignant:恶性 Benign:良性lignant 恶性肿瘤 Benign 良性

良/恶性乳腺癌肿瘤预测

数据来自于威斯康星大学医院,共计699例样本,每例样本有11列,分别指"样本编号",“肿块厚度”,“细胞大小均匀性”,“细胞形状均匀性”,“边缘黏性”,“单上皮细胞大小”,“裸核”,“染色体”,“正常核”,“有丝分裂”,“肿瘤性质”,其中肿瘤性质2代表良性,4代表恶性,恶性肿瘤样本241例,占34.5%,良性458例,占65.5%,16例样本存在丢失的属性值。分别使用LogisticRegression,SGDClassifier,KNeighborsClassifier
SVC,GaussianNB,DecisionTreeClassifier,RandomForestClassifier
等7种方法数据分析。

七种分析方法

1.LogisticRegression:

逻辑回归是一种分类算法,它预测的是事件发生的概率,通常用于二分类问题。逻辑回归是一种广泛用于解决二分类问题的统计方法,尽管名字中含有“回归”二字,但它实际上是一个分类算法。它通过使用逻辑函数(sigmoid函数)将线性回归的输出映射到概率值(0到1之间),从而预测某个事件发生的概率。逻辑回归适用于线性可分的数据集,且对于特征和目标变量间存在线性关系的情况效果较好。
它通过最大熵原理来估计概率,将线性回归的结果通过sigmoid函数映射到(0,1)区间内,表示概率。
优点:模型简单,计算效率高,对于线性可分问题效果良好。
缺点:对于非线性问题需要手动添加特征或者使用核函数,不能很好地处理特征间的交互作用。

2.SGDClassifier:

SGDClassifier(随机梯度下降分类器)是一种线性分类算法,它使用随机梯度下降法来优化损失函数。SGDClassifier 是使用随机梯度下降法进行优化的线性分类器,支持多种损失函数,如 hinge(用于SVM)、log(用于逻辑回归)等。它特别适合处理大规模数据集,因为它可以在每次迭代中仅使用一个或几个样本来更新模型参数,这样可以减少内存使用并加速训练过程。适用于线上学习和大规模数据分类。
它适用于大规模数据集,因为每次更新权重时只使用一个训练样本,而不是整个数据集。
优点:训练速度快,适合于大数据集,可以通过正则化项防止模型过拟合。
缺点:需要合理设置学习率和迭代次数,可能需要多次尝试才能找到最佳参数。

3.KNeighborsClassifier:

K近邻(KNN)算法是一种基于距离的分类算法,它根据一个点的K个最近邻居的类别,通过投票的方式来预测该点的类别。K近邻是一种基于实例的学习方法,其工作原理是根据一个样本在特征空间中的最近邻居来预测其类别。选择距离最近的K个样本,根据这些邻居的多数类别来决定新样本的类别。K近邻简单直观,但计算量随数据规模增大而增加,且对异常值敏感。
优点:简单直观,不需要训练步骤,对数据的泛化能力强。
缺点:计算成本高,尤其是在大数据集上,需要存储全部数据集,并在预测时进行距离计算。

4.SVC(Support Vector Classification):

支持向量分类器是一种监督学习算法,它通过找到最优的分割超平面来区分不同的类别。支持向量机(SVM)通过寻找一个最优超平面来最大化各类样本之间的间隔,以此来进行分类。SVC能够处理线性和非线性数据,并通过核技巧将数据映射到高维空间以解决非线性问题。它在小样本、高维特征空间中表现优异,但对大规模数据处理较慢。
它特别适用于非线性可分问题,通过核技巧将数据映射到高维空间中,寻找最优分割超平面。
优点:对于非线性问题有很好的分类效果,泛化能力强。
缺点:计算复杂度较高,尤其是在高维空间中。

5.GaussianNB(Gaussian Naive Bayes):

高斯朴素贝叶斯分类器是一种基于概率理论的分类算法,它假设特征之间相互独立。高斯朴素贝叶斯是一种基于贝叶斯定理和特征独立假设的分类算法。它假定每个特征都遵循高斯分布(正态分布)。由于其简单和高效,尤其在文本分类和其他多特征任务中表现良好,但对于特征之间存在较强依赖关系的数据,性能可能下降。
它使用贝叶斯定理和高斯分布来估计每个类别的概率。
优点:计算简单,对小数据集表现良好,易于实现。
缺点:特征独立假设在现实世界中往往不成立,这可能导致分类性能下降。

6.DecisionTreeClassifier:

决策树分类器通过树状结构来表示决策过程,是一种直观且易于理解的分类算法。决策树通过递归地划分数据集,根据特征值的不同来构建一棵树状结构,每个内部节点代表一个特征上的测试,每个分支代表一个测试结果,而每个叶节点代表一个类别。决策树易于理解和可视化,能够处理特征间的非线性关系,但容易过拟合,需要剪枝来优化。
它通过树的分支来表示决策规则,每个叶节点代表一个类别。
优点:直观易懂,不需要复杂的数学知识,可以处理分类和回归问题。
缺点:容易过拟合,对于不平衡的数据集表现不佳。

7.RandomForestClassifier:

随机森林是一种集成学习方法,通过构建多个决策树并取其平均预测结果来提高预测准确性和防止过拟合。它在每个树的构建过程中采用随机特征子集,增强了模型的多样性,适用于复杂分类问题,具有很好的泛化能力。
它通过引入随机性来减少过拟合,例如在决策树构建过程中随机选择特征。
优点:通常比单个决策树有更好的性能,对过拟合有一定的抵抗力。
缺点:模型复杂,计算成本较高,模型解释性不如单个决策树。

总结

每种算法都有其优缺点,适用于不同的场景。例如,逻辑回归适用于线性可分的数据,而支持向量机(SVC)在特征空间中寻找最优的分割超平面,适用于非线性可分的数据。K近邻(KNN)算法简单直观,但计算成本较高,特别是在大数据集上。朴素贝叶斯分类器在特征独立假设成立的情况下表现良好,但这个假设在现实世界中往往不成立。决策树和随机森林算法易于理解和解释,但可能会过拟合。

在实际应用中,选择合适的算法通常需要考虑数据的特点、模型的复杂性、训练时间以及预测性能等因素。此外,通常还需要进行参数调优、特征工程和模型评估等步骤来优化模型性能。

在这里插入图片描述

  • 38
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值