《机器学习与实践》读书笔记及代码(二)

基础篇:支持向量机(分类)

#从sklearn.datasets里导入手写体数字加载器
from sklearn.datasets import load_digits
#从通过数据加载器,获得手写体数字的数码图像数据,并存储在digits变量中
digits = load_digits()
#检视数据规模和特征维度
digits.data.shape

#从sklearn.cross_validation中导入train_test_split 用于数据分割
from sklearn.cross_validation import train_test_split

#随机选取75%的数据作为训练样本,其余25%的数据作为测试样本
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size = 0.25,random_state = 33)

y_train.shape

y_test.shape

#使用支持向量机分类,对手写体数字图像进行识别
from sklearn.preprocessing import StandardScaler
#使用sklearn.svm里导入基于现行假设的支持向量机分类器LinearSVC
from sklearn.svm import LinearSVC

#从仍然需要对训练和测试的特征数据进行标准化
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)

#初始化线性假设的支持向量机分类器LinearSVC
lsvc = LinearSVC()
#进行模型训练
lsvc.fit(X_train,y_train)
#利用训练好的模型对测试样本的数字类别进行预测,预测结果存储在变量y_predict中
y_predict = lsvc.predict(X_test)

#使用模型自带的评估函数进行准确性测评
print 'The accuracy of linear SVC is', lsvc.score(X_test, y_test)

#依然使用sklearn.metrics里面的classification_report模块对预测结果进行更加详细的分析
from sklearn.metrics import classification_report
print classification_report(y_test,y_predict, target_names = digits.target_names.astype(str))

基础篇:朴素贝叶斯

#从sklearn.datasets里导入新闻数据抓取器fetch_20newsgroups
from sklearn.datasets import fetch_20newsgroups

#从网上下载相关数据
news = fetch_20newsgroups(subset='all')
#查验数据和细节
print len(news.data)
print news.data[0]

#20类新闻文本数据分割
from sklearn.cross_validation import train_test_split
#随机采样25%的数据样本作为测试集
X_train, X_test, y_train, y_test = train_test_split(news.data,news.target,test_size = 0.25, random_state = 33)

#使用朴素贝叶斯分类器对新闻文本数据进行类别预测
#从sklearn.feature_extraction.text里导入用于文本特征向量转化模块
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
X_train = vec.fit_transform(X_train)
X_test = vec.transform(X_test)

#从sklearn.naive_bayes里导入朴素贝叶斯模型
from sklearn.naive_bayes import MultinomialNB
#从使用默认配置,初始化贝叶斯模型
mnb = MultinomialNB()
#利用训练数据对模型参数进行估计
mnb.fit(X_train,y_train)
#对测试样本进行类别预测,结果存储在变量y_predict中
y_predict = mnb.predict(X_test)

#从sklearn.metrics里导入classification_report
from sklearn.metrics import classification_report
print 'The accuracy of Naive Bayes is:',mnb.score(X_test,y_test)
print classification_report(y_test,y_predict,target_names = news.target_names)

基础篇:K近邻(分类)

from sklearn.datasets import load_iris

#使用加载器读取数据,并且存入变量iris
iris = load_iris()

#查验数据集规模
iris.data.shape

#查看数据说明,对于一名机器学习的实践者而言,这是一个好习惯
print iris.DESCR

from sklearn.model_selection import train_test_split

X_train, X_test, y_train,y_test = train_test_split(iris.data,iris.target,test_size = 0.25, random_state =33)

from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

#对训练和测试的特征数据,进行标准化
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)

#使用K近邻分类器,对测试数据进行类别预测,预测结果储存在变量y_predict中
knc = KNeighborsClassifier()
knc.fit(X_train,y_train)
y_predict = knc.predict(X_test)

#使用模型自带的分股函数进行准确性测评
print 'The accuracy of KNN Classifier is:',knc.score(X_test,y_test)

#使用sklearn.metrics里面的classification_report模块对预测结果做更详细的分析
from sklearn.metrics import classification_report
print classification_report(y_test,y_predict,target_names=iris.target_names)

基础篇:决策树

#Titanic
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(),查看数据的统计特性
titanic.info()

#机器学习有一个不太被初学者所重视,并且耗时。但是十分重要的一环————特征的选择,这个需要依据一些背景知识。
#根据我们对这场事故的了解,age,sex,pclass这些特征都很有可能是决定幸免与否的关键因素
X = titanic[['pclass','age','sex']]
y = titanic[['survived']]

#对当前的特征进行探查
X.info()


#在上面的表格中,我们发现有几个数据处理的任务:
#(1)age这个数据列,只有633个,需要补充
#(2)pclass与sex数据类都是object型的,需要转化为数值特征,用0/1代替

#首先我们补充age里的数据,使用平均数或者中位数,都是对模型偏离造成最小影响的策略
X['age'].fillna(X['age'].mean(),inplace = True)

X.info()

#数据分割
from sklearn.model_selection import train_test_split
X_train, X_test, y_train,y_test = train_test_split(X,y,test_size = 0.25,random_state = 33)

#使用sklearn.feature_extraction中的特征转换器
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse = False)

#转换特征后,我们把凡是object型的特征都单独剥离出来,独成一列特征,数值型的则保持不变
X_train = vec.fit_transform(X_train.to_dict(orient='record'))
print vec.feature_names_

#同样需要对测试数据的特征进行转换
X_test = vec.transform(X_test.to_dict(orient='record'))

#从sklearn.tree中导入决策树分类器
from sklearn.tree import DecisionTreeClassifier
#使用默认配置初始化决策树分类器
dtc = DecisionTreeClassifier()
#使用分割道德训练数据进行模型学习
dtc.fit(X_train,y_train)
#用训练好的决策树模型对测试特征数据进行越策
y_predict = dtc.predict(X_test)

#决策树模型,对泰坦尼克号乘客是否生还的预测性能

from sklearn.metrics import classification_report
#输出预测准确性
print dtc.score(X_test,y_test)
#输出更加详细的分类性能
print classification_report(y_predict,y_test,target_names=['died','survived'])

基础篇:集成模型

#Titanic
import pandas as pd
#利用pandas的read_csv模块直接从互联网手机泰坦尼克号的乘客数据
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')

#根据我们对这场事故的了解,age,sex,pclass这些特征都很有可能是决定幸免与否的关键因素
X = titanic[['pclass','age','sex']]
y = titanic[['survived']]

#首先我们补充age里的数据,使用平均数或者中位数,都是对模型偏离造成最小影响的策略
X['age'].fillna(X['age'].mean(),inplace = True)


#数据分割
from sklearn.model_selection import train_test_split
X_train, X_test, y_train,y_test = train_test_split(X,y,test_size = 0.25,random_state = 33)

#使用sklearn.feature_extraction中的特征转换器
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse = False)

#转换特征后,我们把凡是object型的特征都单独剥离出来,独成一列特征,数值型的则保持不变
X_train = vec.fit_transform(X_train.to_dict(orient='record'))
print vec.feature_names_

#同样需要对测试数据的特征进行转换
X_test = vec.transform(X_test.to_dict(orient='record'))


#从sklearn.tree中导入决策树分类器
from sklearn.tree import DecisionTreeClassifier
#使用默认配置初始化决策树分类器
dtc = DecisionTreeClassifier()
#使用分割道德训练数据进行模型学习
dtc.fit(X_train,y_train)
#用训练好的决策树模型对测试特征数据进行越策
dtc_y_pred = dtc.predict(X_test)


#使用随机森林分类器,进行集成模型的训练和预测分析
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier()
rfc.fit(X_train,y_train)
rfc_y_pred = rfc.predict(X_test)


#使用梯度提升决策树,进行集成模型的训练和预测分析
from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier()
gbc.fit(X_train,y_train)
gbc_y_pred = gbc.predict(X_test)


#集成模型,预测泰坦尼克号乘客是否生还的预测性能
from sklearn.metrics import classification_report

#输出单一决策树在测试集上的分类准确性,以及更加详细的精确率,照护绿等
print 'The acuuracy of decision tree is:', dtc.score(X_test,y_test)
print classification_report(dtc_y_pred,y_test)

#输出随机森林分类器在测试集上的分类准确性,以及更加详细的精确率,照护绿等
print 'The acuuracy of decision tree is:', rfc.score(X_test,y_test)
print classification_report(rfc_y_pred,y_test)

#输出随机森林分类器在测试集上的分类准确性,以及更加详细的精确率,照护绿等
print 'The acuuracy of decision tree is:', gbc.score(X_test,y_test)
print classification_report(gbc_y_pred,y_test)

猜你喜欢

转载自blog.csdn.net/garrulousabyss/article/details/81270788
今日推荐