【scikit-learn】用Python进行机器学习实验
概要
本文是用Python编程语言来进行机器学习小实验的第一篇。主要内容例如以下:
- 读入数据并清洗数据
- 探索理解输入数据的特点
- 分析怎样为学习算法呈现数据
- 选择正确的模型和学习算法
- 评估程序表现的准确性
读入数据 Reading the data
当读入数据时,你将面临处理无效或丢失数据的问题。好的处理方式相比于精确的科学来说。更像是一种艺术。
由于这部分处理适当能够适用于很多其它的机器学习算法并因此提高成功的概率。
用NumPy有效地咀嚼数据。用SciPy智能地吸收数据
Python是一个高度优化的解释性语言。在处理数值繁重的算法方面要比C等语言慢非常多。那为什么依旧有非常多科学家和公司在计算密集的领域将赌注下在Python上呢?由于Python能够非常easy地将数值计算任务分配给C或Fortran这些底层扩展。当中NumPy和SciPy就是当中代表。
NumPy提供了非常多有效的数据结构。比方array,而SciPy提供了非常多算法来处理这些arrays。
不管是矩阵操作、线性代数、最优化问题、聚类。甚至高速傅里叶变换,该工具箱都能够满足需求。
读入数据操作
这里我们以网页PV数据为例,第一维属性是小时,第二维数据是点击个数。
import scipy as sp
data = sp.genfromtxt('web_traffic.tsv', delimiter='\t')
预处理和清洗数据
当你准备好了你的数据结构用于存储处理数据后。你可能须要很多其它的数据来确保预測活动。或者拥有了非常多数据。你须要去思考怎样更好的进行数据採样。
在将原始数据(raw data)进行训练之前,对数据进行提炼能够起到非常好的作用,有时。一个用提炼的数据的简单的算法要比使用原始数据的高级算法的表现效果要好。这个工作流程被称作特征project(feature engineering)。Creative and intelligent that you are, you will immediately see the results。
因为数据集中可能还有无效数值(nan),我们能够事先看一下无效值的个数:
hours = data[:,0]
hits = data[:,1]
sp.sum(sp.isnan(hits))
用以下的方法将其过滤掉:
#cleaning the data
hours = hours[~sp.isnan(hits)]
hits = hits[~sp.isnan(hits)]
为了将数据给出一个直观的认识,用Matplotlib的pyplot包来将数据呈现出来。