癌症检测与机器学习

在全球范围内,癌症是导致死亡的主要原因之一,据世界卫生组织估计,每年有超过900万人死于癌症。对于医生来说,准确诊断癌症是一项挑战性任务。为了提供适当的治疗,需要一个自动预测系统来诊断患者,这就需要专门的技术和专业知识来对抗这一问题。

面临的挑战

过去几十年来,对癌症的持续研究一直在进行。然而,对于医生来说,准确预测癌症是最具有挑战性的任务之一。早期诊断将增加患者的生存机会。关键挑战在于如何将癌症肿瘤分类为恶性或良性。因此,机器学习已成为医学研究人员的流行工具。

问题定义

本系统的目标是解决现有系统中的挑战和问题,通过设计一个使用机器学习检测患者是否被诊断出癌症的系统。数据集来自威斯康星州乳腺癌诊断(WBCD),从UCI存储库中获取。数据包括569名患者的肿瘤的32个特征,如半径、紧凑度、纹理、周长等。

系统工作流程

系统的输入将是肿瘤的特征,如半径、周长、紧凑度等。使用成对图、计数图、热图对数据进行可视化和分析。使用分类算法如SVM将肿瘤分类为恶性和良性。最后,使用精确度、召回率、准确度等性能评估参数来评估模型。

实现

导入所有必要的Python库,如seaborn、NumPy、matplotlib.pyplot、pandas,如下所示:

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns

如下加载训练数据集:

train = pd.read_csv('load_breast_cancer.csv')

使用head()方法打印训练数据集的前5行:

train.head()

输出显示有569行和32列的训练数据集,使用shape()方法。类别分布为212个恶性和357个良性。

describe()方法显示均值、计数、标准差等值。describe(include=['O'])将显示对象数据类型的描述性统计。创建了一个pandas数据框。

df_cancer = pd.DataFrame(cancer['data'], columns=cancer['feature_names'])

使用info()方法查看数据集的更多细节:

df_cancer.info()

分类数据编码为数值数据,例如将M编码为0,B编码为1,在目标列中。

数据可视化是数据的图形表示,以理解数据中的模式、趋势和异常值。

使用热图更容易地可视化列之间的相关性。数据集的热图如下:

sns.heatmap(df_cancer.corr(), annot=True)

成对图将数据显示为点的集合。它有助于分析每个变量之间的关系。数据集的成对图如下:

sns.pairplot(df_cancer, hue='target', vars=['mean radius', 'mean texture', 'mean area', 'mean perimeter', 'mean smoothness', 'mean compactness'])

它将表示恶性和良性患者的类别分布。类别分布为212个恶性和357个良性。

将数据集分割为70%的训练集和30%的测试集,如下所示:

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(df_cancer, np.ravel(df_target), test_size=0.30, random_state=101)

将使用SVM(支持向量机),这是一种机器学习分类算法。它是一种监督学习算法,用于分析数据进行分类。在这个算法中,将每个数据项像点一样在n维空间中绘制,每个特征的值作为坐标的值,并执行分类,这是通过找到将两个类别区分开来的超平面来完成的。SVM在Python的scikit-learn库中可用。

from sklearn.svm import SVC model = SVC() model.fit(X_train, y_train) predictions = model.predict(X_test)

使用它的结构是——导入必要的库,创建对象,模型拟合和预测。

from sklearn.metrics import classification_report, confusion_matrix print(confusion_matrix(y_test, predictions)) print(classification_report(y_test, predictions))

这里类别0的召回率和精确度为0,这意味着分类器将所有内容都归为一个类别。因此,模型需要使用GridSearchCV进行参数调整。它有助于循环预定义的超参数,并拟合模型到训练集上。

param_grid = {'C': [0.1, 1, 10, 100, 1000], 'gamma': [1, 0.1, 0.01, 0.001, 0.0001], 'kernel': ['rbf']} from sklearn.model_selection import GridSearchCV grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=3) grid.fit(X_train, y_train) grid_predictions = grid.predict(X_test) print(confusion_matrix(y_test, grid_predictions)) print(classification_report(y_test, grid_predictions))

因此得到了一个优化后的系统,类别0的精确度为95%,类别1的精确度为94%。

用户界面设计

使用Tkinter,这是Python的标准GUI包。它为用户提供了一种简单易行的方式来创建GUI元素,使用Tk工具包中的控件。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485