牙,仅需10分钟:敞开你的机器学习之路,种太阳

频道:今日头条 日期: 浏览:306

机器学习之路虽漫漫无垠,但莘莘学子仍然纷繁投入到机器学习的激流中。怎么更有效地开端机器学习呢?所谓「八仙过海,各显神通」,本文作者以Python言语为东西进行机器学习,并以Kaggle比赛中的泰坦尼克号项目进行具体解读。跟着小编来看看吧!

跟着行业界机器学习的兴起,能够帮用户快速迭代整个进程的东西变得至关重要。Python,机器学习技能领域冉冉升起的一颗新星,往往是带你走向成功的首选。因而,用 Python 完结机器学习的攻略是十分必要的。

用 Python 完结机器学习的介绍

那么为什么是 Python 呢?依据我的经历,Python 是最简单学习的编程言语之一。现在需求快速迭代整个进程,与此同时,数据科学家不需求深化了解这种言语,由于他们能够快速把握它。

有多简单呢?

for anything in the_list:
print(anything)

就这么简单。Python 的语法和英语(或人类言语,而不是机器言语)语法关系密切。在 Python 的语法中没有愚笨的大括号形成的困扰。我有一个歇斯底里从事质量保证(Quality Assurance)作业的搭档,尽管不是软件工程师,但她能够在一天内写出产等第的 Python 代码。(真的!)

我将在下文中介绍几个依据 Python 的库。作为数据剖析师和数据科学家,咱们能够使用他们的创作来协助咱们完结使命。这些难以想象的库是用 Python 完结机器学习的必备东西。

NumPy

这是一个十分有名的数据剖析库。从核算数据散布的中位数,到处理多维数组,NumPy 放放都能够帮你完结。

Pandas

这是用来处理 CSV 文件的。当然了,你还需求处理一些表格、检查核算数据等,那 Pandas 便是能够满意你的需求的东西。

Matplotlib

把数据存储在 Pandas 的数据框后,你或许需求做一些可视化来了解数据的更多信息。究竟一图抵千言。

Seaborn

这是另一个可视化东西,但这个东西更侧重于核算成果的可视化,比方直方图、饼图、曲线图或相关性表等。

Scikit-Learn

这是用 Python 完结机器学习的终极东西。所谓用 Python 完结机器学习指的便是这个——Scikit-Learn。一切你需求的从算法到提高的内容都能在这里找到。

Tensorflow 和 Pytorch

针对这两个东西我不会说太多。但假如你对深度学习感兴趣的话,能够具体了解一下,它们值得你花时刻去学习。(我下次会再写一篇关于深度学习的教程,敬请期待!)

Python 机器学习项目

当然,仅仅阅览和学习是无法让你抵达愿望的。你需求实践操练。正如我博客中所说的,假如你没有深化数据的话,那学习这些东西将毫无意义。因而,我在这里介绍一个能够轻松找到 Python 机器学习项目的当地。

博客地址:https://thedatamage.com/

Kaggle 是一个能够直接研讨数据的渠道。你能够在这个渠道中处理一些项目,并抵达真的拿手机器学习的境地。你或许更感兴趣别的一些东西——Kaggle 举行的机器学习比赛,奖金高达 100,000 美元。你或许会想着碰碰命运,哈哈。

Kaggle:https://www.kaggle.com/

但最重要的并不是钱——你真的能够在这里找到用 Python 完结的机器学习项目。你能够试着完结许多项目。但假如你是个新手,你或许会想参与这项比赛。

咱们将在后边的教程中用到一个溉组词示例项目:

泰坦尼克:从灾祸中进行机器学习(https://www.kaggle.com/c/titanic)

这便是众所周知的泰坦尼克号。这是一场发生在 1912 年的灾祸,这场灾祸涉及到的乘客和机组成员共 2224 人,其间 1502 人罹难逝世。这项 Kaggle 比赛(或许说是教程)供给了灾祸中的实在数据。你的使命是解说这些数据,并预测出灾祸中哪些人会活下来,哪些人不会。

用 Python 完结机器学习的教程

在深化了解泰坦尼克号的数据之前,咱们要先装置一些必需的东西。

首要当然是 Python。第一次装置 Python 需求从官网上装置。你要装置 3.6 以上的版别,这样才干跟最新版别的库坚持同步。

Python 官方网站:https://www.python.org/downloads/

然后能够用 Python 的 pip 装置一切的库。你刚刚下载的 Python 发行版会主动装置 pip。

需求的其他东西都能够用 pip 装置。翻开终端、指令行或 PowerShell,指令如下:

pip install numpy
pip install pandas
pip install matplotlib
pip install seaborn
pip install scikit-learn
pip install jupyter

看起来一切都运转杰出。可是等一下,什么叫 jupyter?jupyter 表明 Julia、Python 和 R,因而它实践上是 Jupytr。但这个单词看起来太奇怪了,所以他们把它变成了 Jupyter。这是一个很有名的笔记本,你能够在这个笔记本上写交互式的 Python 代码。

只需在终端中输入 jupyter notebook,就能够翻开如下图所示的浏览器页面:

你能够把代码写在绿色矩形中,并且能够交互式地编写并点评 Python 代码。

现在你现已装置了一切的东西。咱们开端吧!

数据探究

探究数据是第一步。你需求从 Kaggle 的 Titanic 页面下载数据,然后将下载的数据放到你发动 Jupyter 笔记本的文件夹中。

数据下载地址:https://www.kaggle.com/c/titanic/data

然后导入必要的库:

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline

载入数据:

train_df=pd.read_csv("train.csv")
train_df.head()

输出如下:

这便是咱们的数据。它有下面几列:

  • PassengerId,乘客的标识符;
  • Survived,他(她)是否存活了下来;
  • Pclass,舱室类别,或许 1 表明经济舱,2 表明商务舱,3 表明头等舱;
  • Name,乘客的姓名;
  • Sex,性别;
  • Age,年纪;
  • SibSp,即兄弟姐妹(siblings)或爱人(spouses),表明在船上的兄弟姐妹以及爱人的数目;
  • Parch,即爸爸妈妈(Parents)或子女(Children),表明在船上的爸爸妈妈和子女的数目;
  • Ticket,船票概况;
  • Cabin,舱号,NaN 表明不知道;
  • Embarked,登船的开始地,S 表明南安普顿(Southampton),Q 表明皇后镇(Queenstown),C 表明瑟堡(Cherbourg)

在探究数据时,常常会遇到数据缺失的问题。咱们来看一下

def missingdata(data):
total = data.isnull().sum().sort_values(ascending = False)
percent = (data.isnull().sum()/data.isnull().count()*100).sort_values(ascending = False)
ms=pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
ms= ms[ms["Percent"] > 0]
f,ax =plt.subplots(figsize=(8,6))
plt.xticks(rotation='90')
fig=sns.barplot(ms.index, ms["Percent"],color="green",alpha=0.8)
plt.xlabel('Features', fontsize=15)
plt.ylabe忘语l('Percent of missing values', fontsize=15)
plt.title('Percent missing data by feature', fontsize=15)
ret越王勾践剑urn ms
missingdata(train_df)

咱们会看到这样的成果:

舱号、年纪以及登船地的数据都有一些缺失值,而舱号信息有许多的缺失。咱们需求对它们进行处理,也便是所谓的数据整理(Data Cleaning)。

数据整理

咱们 90% 的时刻都花在这上面。咱们要针对每一个机器学习项目进行许多的数据整理。当数据整理洁净时,咱们就能够轻松地进行下一步了,什么都不必忧虑。

数据整理中最常用的技能是填充缺失数据。你能够用众数、平均数或中位数来填充缺失数据。挑选这些数据没有肯定规矩,你能够逐个测验,然后看看它们的体现怎么。可是依据经历来讲,分类数据只能用众数,接连数据能够用中位数或平均数。所以咱们用众数来填充登船地数据,用中位数来填充年纪数据。

train_df['Embarked'].fillna(train_df['Embarked'].mode()[0], inplace = True)
train_df['Age'].fillna(train_df['Age'].median(), inplace = True)

接下来的重要操作是删去数据,特别针对许多缺失的数据。咱们针对舱号数据进行以下处理:

drop_column = ['Cabin']
train_df.drop(drop_column, axis=1, inplace = True)

现在检查一下整理过的数据。

print('check the nan value in train data')
print(train_df.isnull().sum())

完美!没有任何缺失数据了!这表明数据现已整理洁净了。

特征工程

现在数据现已整理洁净了。接下来咱们要进行特征工程。

特征工程基本上便是依据当时可用数据发现特征或数据的技能。有几种办法能够完结这种技能。在许多时分这都是知识。

咱们以登船地数据为例——这是用 Q、S 或 C 填充的数据。Python 库不能处理这个,由于它只能处理数字。所以你需求用所谓的独热向量化(One Hot Vectorization)来处理,它能够把一列变成三列。用 0 或 1 填充 Embarked_Q、Embarked_S 和 Embarke克莱因瓶d_C,来表明这个人是不是从这个港口动身的。

再以 SibSp 和 Parch 为例。这两列没有什么风趣的,可是你或许会想知道某个乘客有多少家人登上了这艘船。假如家人多的话或许会添加生计几率,由于他们能够互相协助。从另一个视点说,独自登船的乘客或许很难生计下去。

因而你能够创立新的一列,这一列是成员数量(family size),family size = SibSp + Parch + 1(乘客自己)。

终究一个比方是以 bin 列为例的。由于你以为很难区别具有类似值的事物,所以这种操作创立了值规模(ranges of values),然后将多个值组合在一起。比方,5 岁和 6 岁的乘客之间有明显的差异吗?或许 45 和 46 岁的人之间有明显的差异吗?

这便是创立 bin 列的原因。或许就年纪而言,咱们能够创立 4 列——幼儿(0~14 岁)、青少年(14~20 岁)、成年人(20~40 岁)以及王厚道加盟年长的人(40 岁以上)。

编码如下:

all_data = train_df
for dataset in all_data :
dataset['FamilySize'] = dataset['SibSp'] + dataset['Parch'] + 1
import re
# Define function to extract titles from passenger names
def get_title(name):
title_search = re.search(' ([A-Za-z]+)\.', name)
# If the title exists, extract and return it.
if title_search:
return title_search.group(1)
return ""
# Create a new feature Title, containing the titles of passenger names
for dataset in all_data:
dataset['Title'] = dataset['Name'].apply(get_title)
# Group all non-common titles into one single grouping "Rare"
for dataset in all_data:
dataset['Title'] = dataset['Title'].replac优酷会员账号同享e(['Lady', 'Countess','Capt', 'Col','Don',
'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss')
dataset['Title'] = dataset['Title'].replace('Ms', 'Miss')
dataset['Title'] = dataset['Title'].repl牙,仅需10分钟:打开你的机器学习之路,种太阳ace('Mme', 'Mrs')
for dataset in all_data:
dataset['Age_bin'] = pd.cut(dataset['Age'], bins=[0,14,20,40,120], labels=['Children','Teenage','Adult','Elder'])
for dataset in all_data:
dataset['Fare_bin'] = pd.cut(dataset['Fare'], bin女人性欲s=[0,7.91,14.45,31,120], labels ['Low_fare','median_fare', 'Average_fare','high_fare'])
traindf=train_df
for dataset in traindf:
drop_column = ['Age','Fare','Name','Ticket']
dataset.drop(drop_column, axis=1, inplace = True)
drop_column = ['PassengerId']
traindf.drop(drop_column, axis=1, inplace = True)
traindf = pd.get_dummies(traindf, columns = ["Sex","Title","Age_bin","Embarked","Fare_bin"],
prefix=["Sex","Title","Age_type","Em_type","Fare_type"])

现在,你现已创立完结一切的特征了。接着咱们看看这些特征之间的相关性:

sns.heatmap(traindf.corr(),annot=True,cmap='RdYlGn',linewidths=0.2) #data.corr()-->correlation matrix
fig=plt.gcf()
fig.set_size_inches(20,12)
plt.show()

相关值挨近 1 意味着高度正相关,-1 意味着高度负相关。例如,性别为男和性别为女之间就呈负相关,由于必须将乘客识别为一种性别(或另一种)。此外,你还能够看到,除了用特征工程创立的内容外,没有哪两种是高度相关的。这证明咱们做得对。

假如某些要素之间高度相关会怎么样?咱们能够删去其间的一个,新列中的信息并不能给体系供给任何新信息,由于这两者是彻底牙,仅需10分钟:打开你的机器学习之路,种太阳相同的。

用 Python 完结机器学习

现在咱们现已抵达本教程的高潮——机器学习建模。

from sklearn.model_selection im君迪影投port train_test_split #for split the data
from sklearn.metrics import accuracy_score #fo古力娜扎被p遗像r accuracy_score
from sklearn.model_selection import KFold #for K-fold cross validation
from sklearn.model_selection import cross_val_score #score evaluation
from sklearn.model_selection import cross_val_predict #prediction
from skle子弹arn.metrics import confusion_matrix #for confu牙,仅需10分钟:打开你的机器学习之路,种太阳sion matrix
all_features = traindf.drop("Survived",axis=1)
Targeted_feature = traindf["Survived"]
X_train,X_test,y_train,y_test = train_test_split(all_features,Targeted_feature,test_size=0.3,random_state=42)
X_train.shape,X_test.shape,y_train.shape,y_test.shape

Scikit-Learn 库中有多种算法供你挑选:

  • 逻辑回归
  • 随机森林
  • 支撑向量机
  • K 最近邻
  • 朴素贝叶斯
  • 决策树
  • AdaBoost
  • LDA
  • 梯度增强

你或许感到手足无措,想澄清什么是什么。别忧虑,只需将它作为「黑箱」对待就好——选一个体现最好的。(我之后会写一篇完好的文章评论怎么挑选这些算法。)

以我最喜欢的随机森林算法为例:

from sklearn.ensemble import Rand上海市天气预报omForestClassifier
model = RandomForestClassifier(criterion='gini', n_estimators=700,
min_samples_split=10,min牙,仅需10分钟:打开你的机器学习之路,种太阳_samples_leaf=1,
max_features='auto外挂',oob_score=True,
random_state=1,n_jobs=-1)
model.fit(X_train,y_t阴间公寓rain)
prediction_rm=model.predict(X_test)
print('--------------The Accuracy of the model----------------------------')
print('The accuracy of the Random Forest Classifier is', round(accuracy_score(prediction_rm,y_test)*100,2))
kfold = KFold(n_splits=10, random_state=22) # k=10, split the data into 10 equal parts
result_rm=cross_val_score(model,all_features,Targete我的未来不是梦d华大基因_feature,cv=10,scoring='accuracy')
print('The cross validated score for Random Forest Cla牙,仅需10分钟:打开你的机器学习之路,种太阳ssifier is:',round(result_rm.mean()*100,2))
y_pred = cross_val_predict(model,all_features,Targeted_feature,cv=10)
sns.heatmap(confusion_matrix(Targeted_feature,y_pred),annot=True,fmt='3.0f',cmap="summer")
plt.title('Confusion_matrix', y=1.05, size=15)

哇哦!准确率高达 83%。就第一次测验而言,这个成果现已很好了。

穿插验证分数的意思是 K 折验证办法。假如 K=10,便是说要把数据分红 10 个变量,核算一切分数的均值,并将它们作为终究分数。

微调

现在你现已完结了用 Python 完结机器学习的过程。但再加一个过程能够让你得到更好的成果——微调。微调的意思是为机器学习算法找到最佳参数。以上面焦点访谈曝光徐鹤宁的随机森林代码为例:

model = Random牙,仅需10分钟:打开你的机器学习之路,种太阳ForestClassifier(criterion='gini', n_estimators=700,
min_samples_split=10,min_samples_leaf=1,
max_feat月亮星座ures='auto',oob_score=True,
random_state=1,n_jobs=-1)

你需求设置许多参数。趁便说一下,上面的都是默认值。你能够依据需求改动参数。但当然了,这需求花费许多时刻。

别忧虑——有一种叫做网格查找(Grid Search)的东西,它能够主动找出最佳参数。听起来还不错,对吧?

# Random Forest Classifier Parameters tunning 
model = RandomForest牙,仅需10分钟:打开你的机器学习之路,种太阳Classifier()
n_estim=range(100,1000,100)
## Search grid for optimal parameters
param_grid = {"n_estimators" :n_estim}
model_rf = GridSearchCV(model,param_grid = param_grid, cv=5, scoring="accuracy", n_jobs= 4, verbose = 1)
model_rf.fit(train_X,train_Y)
# Best score
print(model_rf.best_score_)
#best estimator
model_rf.best_estimator_

好了,你能够自己测验一下,并从中享用机器学习的趣味。

总结

怎么样?机器学习看起来好像并不难吧?用 Python 完结机器学习很简单。一切都现已为你预备好了。你能够做一些奇特的事,并给人们带来高兴。

热门
最新
推荐
标签