本篇博客中,我们将对一个UCI数据库中的数据集:Breast-Cancer数据集,应用已有的机器学习方法来实现一个分类器。

本文代码链接

数据集概况

数据集的地址为:link

在该页面中,可以进入Data Set Description 来查看数据的说明文档,另外一个连接是Data Folder 查看数据集的下载地址。

这里我们使用的文件是:

  • breast-cancer-wisconsin.data
  • breast-cancer-wisconsin.names

即:

这两个文件,第一个文件(连接)是我们的数据文件,第二个文件(连接)是数据的说明文档。

对于这样的一份数据,我们应该首先阅读说明文档中的内容来对数据有一个基本的了解。

对数据的预处理

我们可以知道文件有11个列,第1个列为id号,第2-10列为特征,11列为标签(2为良性、4为恶性)。具体的特征内容在文档中,但是我们可以不关心医学上的具体意义,这部分在文档中的描述如下:

7. Attribute Information: (class attribute has been moved to last column)

   #  Attribute                     Domain
-- -----------------------------------------
1. Sample code number id number
2. Clump Thickness 1 - 10
3. Uniformity of Cell Size 1 - 10
4. Uniformity of Cell Shape 1 - 10
5. Marginal Adhesion 1 - 10
6. Single Epithelial Cell Size 1 - 10
7. Bare Nuclei 1 - 10
8. Bland Chromatin 1 - 10
9. Normal Nucleoli 1 - 10
10. Mitoses 1 - 10
11. Class: (2 for benign, 4 for malignant)

另外从文档中我们还可以知道一些其他的信息:

  • 数据集中共有699条信息
  • 数据集中有16处缺失值,缺失值使用"?"表示
  • 数据集中良性数据有458条,恶性数据有241条

缺失值处理和分割数据集

因为缺失的数据不多(11条),所以我们暂时先采用丢弃带有“?”的数据,加上前面读取数据、添加表头的操作,代码如下:

# import the packets
import numpy as np
import pandas as pd DATA_PATH = "breast-cancer-wisconsin.data" # create the column names
columnNames = [
'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 = pd.read_csv(DATA_PATH, names = columnNames)
# show the shape of data
print data.shape # use standard missing value to replace "?"
data = data.replace(to_replace = "?", value = np.nan)
# then drop the missing value
data = data.dropna(how = 'any') print data.shape

输出结果为:

(699, 11)
(683, 11)

可以看到,现在数据中带有缺失值的数据都被丢弃掉了。

我们可以通过类似 data['Class'] 的方式来访问特定的属性,如下图:

然后我们会将数据集分割为两部分:训练数据集和测试数据集,使用了train_test_split,这个函数已经自动完成了随机分割的功能,函数文档

然后我们分割数据集:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
data[ columnNames[1:10] ], # features
data[ columnNames[10] ], # labels
test_size = 0.25,
random_state = 33
)

得到的变量为:

  • X_train : 训练数据集的特征
  • X_test :测试数据集的特征
  • y_train :训练数据集的标签
  • y_test :测试数据集的标签

因为是监督学习,所以所有数据都有标签,且认为标签的内容百分之百准确。

应用机器学习模型

应用机器模型前,应该将每个特征的数值转化为均值为0,方差为1的数据,使训练出的模型不会被某些维度过大的值主导。

这里使用的使scikit-learn 中的 StandardScaler 模块,doc链接

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
X_train = ss.fit_transform(X_train) # fit_transform for train data
X_test = ss.transform(X_test)

然后我们将建立一个机器学习模型, 这里我们使用了Logestic Regression 和 SVM:

# use logestic-regression
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_train, y_train)
lr_y = lr.predict(X_test) # use svm
from sklearn.svm import LinearSVC
lsvc = LinearSVC()
lsvc.fit(X_train, y_train)
svm_y = lsvc.predict(X_test)

分类器的效果评估

首先我们用分类器自带的.score方法来对准确性进行打印:


# now we will check the performance of the classifier
from sklearn.metrics import classification_report
# use the classification_report to present result
# `.score` method can be used to test the accuracy
print 'Accuracy of the LogesticRegression: ', lr.score(X_test, y_test)
# print 'Accuracy on the train dataset: ', lr.score(X_train, y_train)
# print 'Accuracy on the predict result (should be 1.0): ', lr.score(X_test, lr_y)
print 'Accuracy of the SVM: ' , lsvc.score(X_test, y_test)

输出为:

Accuracy of the LogesticRegression:  0.953216374269
Accuracy of the SVM: 0.959064327485

除此以外,我们还可以使用classification_report对分类器查看更详细的性能测试结果:

print classification_report(y_test, svm_y, target_names = ['Benign', 'Malignant'])

其结果如下:

             precision    recall  f1-score   support

     Benign       0.96      0.98      0.97       111
Malignant 0.96 0.92 0.94 60 avg / total 0.96 0.96 0.96 171

[机器学习实践] 针对Breast-Cancer数据集的更多相关文章

  1. Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集

    Python机器学习实践指南 目 录 第1章Python机器学习的生态系统 1 1.1 数据科学/机器学习的工作 流程 2 1.1.1 获取 2 1.1.2 检查和探索 2 1.1.3 清理和准备 3 ...

  2. Python机器学习实践与Kaggle实战(转)

    https://mlnote.wordpress.com/2015/12/16/python%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%AE%9E%E8%B7%B5 ...

  3. 机器学习实践:《Python机器学习实践指南》中文PDF+英文PDF+代码

    机器学习是近年来渐趋热门的一个领域,同时Python 语言经过一段时间的发展也已逐渐成为主流的编程语言之一.<Python机器学习实践指南>结合了机器学习和Python 语言两个热门的领域 ...

  4. 资源|《美团机器学习实践》PDF+思维导图

    今天再给大家推荐一本由美团算法团队出版的<美团机器学习实践>,下载链接见文末. 美团算法团队由数百名优秀算法工程师组成,负责构建美团这个生活服务互联网大平台的"大脑", ...

  5. 《百面机器学习算法工程师带你去面试》高清PDF及epub+《美团机器学习实践》PDF及思维导图

    http://blog.sina.com.cn/s/blog_ecd882db0102yuek.html <百面机器学习算法工程师带你去面试>高清PDF及epub+<美团机器学习实践 ...

  6. Mol Cell Proteomics. | Elevated Hexokinase II Expression Confers Acquired Resistance to 4-Hydroxytamoxifen in Breast Cancer Cells(升高的己糖激酶II表达使得乳腺癌细胞获得对他莫昔芬的抗性)(解读人:黄旭蕾)

    文献名:Elevated Hexokinase II Expression Confers Acquired Resistance to 4-Hydroxytamoxifen in Breast Ca ...

  7. 机器学习实践之K-近邻算法实践学习

    关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2017年12月04日 22:54:26所撰写内容(http://blog.csdn.n ...

  8. 机器学习实践之Logistic回归

        关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2017年12月17日 19:18:31所撰写内容(http://blog.cs ...

  9. 学习笔记TF067:TensorFlow Serving、Flod、计算加速,机器学习评测体系,公开数据集

    TensorFlow Serving https://tensorflow.github.io/serving/ . 生产环境灵活.高性能机器学习模型服务系统.适合基于实际数据大规模运行,产生多个模型 ...

随机推荐

  1. 使用Python-iGraph绘制贴吧/微博好友关系图

    想通过图形化的方式显示社交网络特定用户的好友关系,上网找了一下这方面的图形库有networkx.graphviz等,找了好久我选择了iGraph这个图形库. igraph在Windows下的安装稍微有 ...

  2. 封装Web Uploader 上传插件、My97DatePicker、百度 编辑器 的使用 (ASP.NET MVC)

    Web Uploader: WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优 ...

  3. PHP弱类型语法的实现

    PHP弱类型语法的实现 前言 借鉴了 TIPI, 对 php 源码进行学习 欢迎大家给予意见, 互相沟通学习 弱类型语法实现方式 (弱变量容器 zval) 所有变量用同一结构表示, 既表示变量值, 也 ...

  4. JS属性描述符

    var myObject = { a:2 }; Object.getOwnpropertyDescriptor(myObject,"a"); { value:2, writable ...

  5. js函数中this的指向

    本文是我个人对this指向的一些理解,如有不足之处,还望大家可以批评指正,在此先谢过了! 首先,我们来回顾一下ES5里函数的几种调用方式: 1⃣️直接调用 foo(); 2⃣️方法调用 obj.foo ...

  6. DirectFB学习笔记一

    本文记录directfb程序的基本操作流程. 1.首先创建一个directfb对象:DirectFBInit(&argc,&argv)初始化然后创建DirectFBCreate(&am ...

  7. PHP填补数字前后的0

    PHP数字填补0 经常会遇到这样的问题: 自然数字是0,1,2,3...而我们需要的却是满足多少多少位数的数字,如:001,002. 在ID,编号,学号中我们会经常用到补全前面或者后面的空位(一般为前 ...

  8. 用PetaPoco为ASP.NET已有数据库建模

    序:最近一直在抓紧重构公司的网站,没有很多时间去写博客,积累了很多的问题,几乎是一天一个,折腾死了,尤其是在模型方面几经周折. 以前,多半从事PHP开发,很少接触到模型(thinkphp中模型),但是 ...

  9. <JAVA>可变参数列表

    这是java1.5版本的新特性,就是当你想定义一个方法,但是不知道以后要用的时候传几个参数进去,这时可以在方法的参数列表中这样写(参数类型... 数组名),然后在方法内部直接用操作数组的方式操作.比如 ...

  10. TreeSet小练习

    package 练习.test1; import java.util.Iterator; import java.util.TreeSet; /* 需求:将字符串中的数值进行排序. 例如String ...