南斯拉夫卢布尔雅那大学医疗中心肿瘤研究所的威斯康辛乳腺癌数据集(由M.Zwitter 与M. Soklic 二者提供,该数据集在UCI数据库中找到)卢布尔雅那大学(Univerza v Ljubljani)成立于1919年,是斯洛文尼亚历史最悠久、规模最大的高等学府。位于首都卢布尔雅那市中心,教育设施先进,学生可以攻读从本科到博士的各种课程,学历为世界各国承认。其中经济学院(The faculty of economics)注重国际化的教育,是中欧商校联盟成员,并于2016年8月获得全球商学院最重要的“三皇冠”认证(AMBA、EQUIS、AACSB),跻身世界顶尖商学院的行列。
(1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类型的数值。
(2)包含16个缺失值。
数据下载地址:Index of /ml/machine-learning-databases/breast-cancer-wisconsin (uci.edu)
pandas在线下载数据
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
data=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data')
data.head()
为威斯康辛乳腺癌数据集的九列赋予相应的特征名,具体的特征名如下:
Sample code number 样本编号
Clump Thickness 肿瘤特征1
Uniformity of Cell Size 肿瘤特征2
Uniformity of Cell Shape 肿瘤特征3
Marginal Adhesion 肿瘤特征4
Single Epithelial Cell Size 肿瘤特征5
Bare Nuclei 肿瘤特征6
Bland Chromatin 肿瘤特征7
Normal Nucleoli 肿瘤特征8
Mitoses 肿瘤特征9
Class 肿瘤的种类
代码实现;
#给列名字
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape','Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin','Normal Nucleoli', 'Mitoses', 'Class']
#给data增加一个names参数
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names = names)
data.head()
说明:在通过对特征值处理后对输出的预测值我们用2表示良性,4表示恶性
data.Class
威斯康辛乳腺癌数据集中使用’?’替换缺失值,删除缺失值的样本时,只需要删除用?标记的地方。具体实现的代码如下:
data = data.replace(to_replace='?',value=np.nan)
data = data.dropna() #删除有np.nan的行
#特征值
x = data.iloc[:,1:10]
x.head()
#目标值
y = data['Class']
y.head()
x_train,x_test,y_train,y_test= train_test_split(x,y,test_size=0.2)
transform = StandardScaler()#实例化转换器 #标准化
x_train = transform.fit_transform(x_train)
x_test = transform.fit_transform(x_test)
模型建立:estimate = LogisticRegression()#用默认的就行
训练模型:estimate.fit(x_train,y_train)#得到了模型
estimate.score(x_train,y_train)
estimate.score(x_test,y_test)