在全球范围内,癌症是导致死亡的主要原因之一,据世界卫生组织估计,每年有超过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工具包中的控件。