说明: 一本篇文章主要总结每一种分类学习所使用到的函数,并分析这些函数适合的情况。另外简单总结一下分类学习的各个步骤。
一.提取数据:
提取的数据从《机器学习机器实践》种只有三种种情况,第一种就是从网络上下载数据,如:泰坦尼克号乘客信息。第二种就是从sklearn.datasets导出数据,如:手写体(load_digits)以及(Iris)数据集。第三种情况通过导入新闻抓取器,抓取新闻。
#读取Iris数据集细节资料
#从sklearn.datasets导入iris数据加载器
from sklearn.datasets import load_iris
#使用加载器读取数据并且存入变量iris
iris=load_iris()
#查验数据规模
iris.data.shape
#导入pandas,并且重命名为pd
import pandas as pd
#通过互联网读取泰坦尼克号乘客档案,并且存储在Bain两titanic种
titanic=pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
#观察前几行数据
titanic.head()
#从sklearn.datasets里导入新闻抓取器fetch_20newsgroups
from sklearn.datasets import fetch_20newsgroups
#与之前预存的数据不同,fectch_20newsgroups需要即时从互联网上下载数据
news=fetch_20newsgroups(subset='all')
#查验数据规模和细节
print len(news.data)
print news.data[0]
当然在收集到数据之后,最好是查看一下数据的规模和细节。
二:简单处理原始数据:
下载的数据很多时候会出现数据的丢失,使原始数据不够完整,所以我们在处理数据的时候要么把不完整的那一条数据直接删除,要么把丢失的数据补充完整。下面用良/恶性乳腺肿瘤实验和泰坦尼克号实验,简单介绍如何处理原始数据。
v# 导入pandas与numpy工具包。
import pandas as pd
import numpy as np
# 创建特征列表。
column_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']
# 使用pandas.read_csv函数从互联网读取指定数据。
data = pd.read_csv("breast-cancer-wisconsin.txt", names = column_names )
# 将?替换为标准缺失值表示。
data = data.replace(to_replace='?', value=np.nan)
# 丢弃带有缺失值的数据(只要有一个维度有缺失)。
data = data.dropna(how='any')
# 输出data的数据量和维度。
# print(data.shape)
#导入pandas用于数据分析
import pandas as pd
#利用pandas的read_csv模块直接从互联网手机泰坦尼克号乘客数据
titanic =pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
#观察钱纪旱数据,可以发现,数据种类各异,数值型、类别型,甚至还有缺失数据
titanic.head()
#使用pandas,数据都转入pandas独有的dataframe格式(二维数据表格),直接实用info(),查看数据的统计特性
X=titanic[['pclass','age','sex']]
titanic.info()
X['age'].fillna(X['age'].mean(),inplace=True)
三:分割数据集:
把数据分成两部分,一部分用作训练模型(X_train),另外一部分用作测试(X_test)。其中test_size是用来表示训练集和测试集所占比例,y用来标识X_train。
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=33)
四:特征数据:
模型对于输入的数据也需要处理。处理方式包括直接标准化,文本向量特征转化,还有就是选取一些对结果影响很大属性。
#标准化数据,保证每个维度的特征数据方差为1,均值为0。使得预测结果不会被某些维度过大的特征值而主导
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_train)
#从sklearn.feature_extraction里导入用于文本特征向量转化模块。
from sklearn.feature_extraction.text import CountVectorizer
vec=CountVectorizer()
X_train=vec.fit_transform(x_train)
X_test=vec.transform(test)
X=titanic[['pclass','age','sex']]
y=titanic['survived']
#对当前选择的特征进行探查
X.info
X['age'].fillna(X['age'].mean(),inplace=True)
#使用scikit-learn.feature_extraction中的特征转换器
from sklearn.feature_extraction import DictVectorizer
vec=DictVectorizer(sparse=False)
#转换特征后,我们发现凡是类别型的特征都单独剥离出来,独成一列特征,数值型则保持不变。
print (vec.feature_names_)
五:实验
实验部分就是选定模型,然后用X_train训练模型,之后就直接用训练的模型对测试集进行测试。等实验做完了之后,就可以哟个自身的评分函数进行评分,也可以查召回率等。