Kaggle实战之sklearn学习

今天刚刚接触python机器学习之kaggle实战这本书,初步学习了python机器学习库之sklearn的基本运用,照葫芦画瓢的对书中代码进行了一定的编写运行,小小记录我学机器学习之路
主要是这对支持向量机 、朴素贝叶斯、k近邻、决策树 ,使用sklearn快速对其进行建模训练操作

一 支持向量机

这里不涉及具体的算法原理知识,主要是使用sklearn库函数进行构建训练网络

#使用sklearn中的手写数字识别数据集来进行操作
from sklearn.datasets import load_digits
digits = load_digits()# 加载数据集

digits数据集详细描述
我们可以看出,DESCR为手写数字数据集的详细描述,包含数据的大小,标签,类型等等诸多信息;data shape为(1797,64)意为共有1797张8*8的数字图片矩阵,存储时通常将其变为1d向量,虽然会损失一些2d图像方面的数据信息;同理images类似;target为对应手写数字数据矩阵的标签;target_names为所有的标签种类。

"""手写数据 分割"""
from sklearn.cross_validation import train_test_split # 该函数为数据切割函数
# 划分 数据的训练集和验证集
X_train,X_test,y_train,y_test = train_test_split(digits.data,digits.target,test_size=0.25,random_state=33)

上面中,digits.data,digits.target很好理解,test_size为设置的切割比例,train_data 占75%,test_data 占 25%。

#数据预处理,标准化数据 
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC # 基于线性假设的支持向量机分类器 LinearSVC
ss = StandardScaler() # 初始化 标准化函数
X_train = ss.fit_transform(X_train)
X_test = ss.fit_transform(X_test)

#初始化线性假设的支持向量机分类器 LinearSVC 
lsvc = LinearSVC()

#训练 
lsvc.fit(X_train,y_train)

#利用训练好的模型对测试样本的数字类别进行预测,预测结果存储在变量y_predict中 
y_predict = lsvc.predict(X_test)

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

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

这里写图片描述

同理下面就不在一个个叙述

二 朴素贝叶斯

"""朴素贝叶斯文本分类"""
#news 数据下载 
from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all')

#手写数据 分割 
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=33)

#从导入用于文本特征向量转化模块 
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 = mnb.predict(X_test)

from sklearn.metrics import classification_report
accuracy = mnb.score(X_test,y_test)
print('Accuracy of Naive_Bayes Classifier is :',accuracy)
print(classification_report(y_test,y_predict,target_names=news.target_names))

这里写图片描述

三 k近邻

from sklearn.datasets import load_iris   #  加载数据集
from sklearn.preprocessing import StandardScaler   # 数据预处理之 标准化
from sklearn.cross_validation import train_test_split  #切割数据
from sklearn.neighbors import KNeighborsClassifier  #  导入k近邻分类器,还有k近邻回归
from sklearn.metrics import classification_report  #  分类器性能指标
#加载花数据
iris = load_iris()
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.25,random_state=33)
#标准化数据
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.fit_transform(X_test)
#分类器初始化
knc =  KNeighborsClassifier()
knc.fit(X_train,y_train)
y_predict = knc.predict(X_test)
#打印结果
accuracy = knc.score(X_test,y_test)
print('Accuracy of K-nearest Neighbor Classifier is :',accuracy)
print(classification_report(y_test,y_predict,target_names=iris.target_names))

这里写图片描述

四 决策树

泰塔尼克数据

import pandas as pd # pandas大法
from sklearn.datasets import load_iris   #  加载数据集
from sklearn.preprocessing import StandardScaler   # 数据预处理之 标准化
from sklearn.cross_validation import train_test_split  #切割数据
from sklearn.tree import DecisionTreeClassifier  #  导入决策树分类器,还有k近邻回归
from sklearn.metrics import classification_report  #  分类器性能指标
from sklearn.feature_extraction import DictVectorizer  #  特征转换器
# 加载数据
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
# 提取其中三种特征及标签
X = titanic[['pclass','age','sex']]
y = titanic['survived']
# 数据清洗,补充数据
X['age'].fillna(X['age'].mean(),inplace=True)
# 数据切割
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)
# 对训练数据和测试数据进行特征转换
vec = DictVectorizer(sparse=False)
X_train = vec.fit_transform(X_train.to_dict(orient='record'))
X_test = vec.fit_transform(X_test.to_dict(orient='record'))
# 初始化 决策树分类器
dtc = DecisionTreeClassifier()
# 训练
dtc.fit(X_train,y_train)
# 预测
y_predict = dtc.predict(X_test)
# 准确度
accuracy = dtc.score(X_test,y_test)
print(accuracy)
# 打印更加详细的分类性能
print(classification_report(y_test,y_predict,target_names=['died','survived']))

这里写图片描述

四 机器学习

"""集成学习"""
# 集成模型
import pandas as pd
from sklearn.datasets import load_iris   #  加载数据集
from sklearn.preprocessing import StandardScaler   # 数据预处理之 标准化
from sklearn.cross_validation import train_test_split  #切割数据
from sklearn.tree import DecisionTreeClassifier  #  导入决策树分类器,还有k近邻回归
from sklearn.metrics import classification_report  #  分类器性能指标
from sklearn.feature_extraction import DictVectorizer  #  特征转换器
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')

X = titanic[['pclass','age','sex']]
y = titanic['survived']

X['age'].fillna(X['age'].mean(),inplace=True)

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)
vec = DictVectorizer(sparse=False)
X_train = vec.fit_transform(X_train.to_dict(orient='record'))
X_test = vec.fit_transform(X_test.to_dict(orient='record'))
# 使用单一决策树进行模型训练以及预测分析
dtc = DecisionTreeClassifier()
dtc.fit(X_train,y_train)
dtc_y_predict = dtc.predict(X_test)

accuracy = dtc.score(X_test,y_test)
print('Accuracy of DecisionTreeClassifier is :',accuracy)

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

accuracy = rfc.score(X_test,y_test)
print('Accuracy of RandomForestClassifier is :',accuracy)

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

accuracy = gbc.score(X_test,y_test)
print('Accuracy of GradientBoostingClassifier is :',accuracy)

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值