您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 北大青鸟:Python机器学习介绍
随着行业内机器学习的崛起,能够帮用户快速迭代整个过程的工具变得至关重要。Python,机器学习技术领域冉冉升起的一颗新星,往往是带你走向成功的首选。因此,用Python实现机器学习的指南是非常必要的。用Python实现机器学习的介绍那么为什么是Python呢?根据我的经验,Python是最容易学习的编程语言之一。现在需要快速迭代整个过程,与此同时,数据科学家不需要深入了解这种语言,因为他们可以快速掌握它。有多容易呢?foranythinginthe_list:print(anything)就这么容易。Python的语法和英语(或人类语言,而不是机器语言)语法关系密切。在Python的语法中没有愚蠢的大括号造成的困扰。我有一个从事质量保证(QualityAssurance)工作的同事,虽然不是软件工程师,但她可以在一天内写出产品级的Python代码。(真的!)我将在下文中介绍几个基于Python的库。作为数据分析师和数据科学家,我们可以利用他们的杰作来帮助我们完成任务。这些不可思议的库是用Python实现机器学习的必备工具。NumPy这是一个非常有名的数据分析库。从计算数据分布的中位数,到处理多维数组,NumPy都可以帮你完成。Pandas这是用来处理CSV文件的。当然了,你还需要处理一些表格、查看统计数据等,那Pandas就是可以满足你的需求的工具。Matplotlib把数据存储在Pandas的数据框后,你可能需要做一些可视化来理解数据的更多信息。毕竟一图抵千言。Seaborn这是另一个可视化工具,但这个工具更侧重于统计结果的可视化,比如直方图、饼图、曲线图或相关性表等。Scikit-Learn这是用Python实现机器学习的终极工具。所谓用Python实现机器学习指的就是这个——Scikit-Learn。所有你需要的从算法到提升的内容都能在这里找到。Tensorflow和Pytorch针对这两个工具我不会说太多。但如果你对深度学习感兴趣的话,可以详细了解一下,它们值得你花时间去学习。(我下次会再写一篇关于深度学习的教程,敬请期待!)Python机器学习项目当然,只是阅读和学习是没法让你达成心愿的。你需要实际练习。正如我博客中所说的,如果你没有深入数据的话,那学习这些工具将毫无意义。因此,我在这里介绍一个可以轻松找到Python机器学习项目的地方。Kaggle是一个可以直接研究数据的平台。你可以在这个平台中解决一些项目,并达到真的擅长机器学习的地步。你可能更感兴趣另外一些东西——Kaggle举办的机器学习竞赛,奖金高达100,000美元。你可能会想着碰碰运气,哈哈。但最重要的并不是钱——你真的可以在这里找到用Python实现的机器学习项目。你可以试着完成很多项目。但如果你是个新手,你可能会想参加这项竞赛。我们将在后面的教程中用到一个示例项目:泰坦尼克:从灾难中进行机器学习这就是众所周知的泰坦尼克号。这是一场发生在1912年的灾难,这场灾难波及到的乘客和机组成员共2224人,其中1502人遇难死亡。这项Kaggle竞赛(或者说是教程)提供了灾难中的真实数据。你的任务是解释这些数据,并预测出灾难中哪些人会活下来,哪些人不会。用Python实现机器学习的教程在深入了解泰坦尼克号的数据之前,我们要先安装一些必需的工具。首先当然是Python。第一次安装Python需要从官网上安装。你要安装3.6以上的版本,这样才能跟最新版本的库保持同步。Python官方网站:然后可以用Python的pip安装所有的库。你刚刚下载的Python发行版会自动安装pip。需要的其他工具都可以用pip安装。打开终端、命令行或PowerShell,命令如下:pipinstallnumpypipinstallpandaspipinstallmatplotlibpipinstallseabornpipinstallscikit-learnpipinstalljupyter看起来一切都运行良好。但是等一下,什么叫jupyter?jupyter表示Julia、Python和R,因此它实际上是Jupytr。但这个单词看起来太奇怪了,所以他们把它变成了Jupyter。这是一个很有名的笔记本,你可以在这个笔记本上写交互式的Python代码。只要在终端中输入jupyternotebook,就可以打开如下图所示的浏览器页面:你可以把代码写在绿色矩形中,而且可以交互式地编写并评价Python代码。现在你已经安装了所有的工具。我们开始吧!数据探索探索数据是第一步。你需要从Kaggle的Titanic页面下载数据,然后将下载的数据放到你启动Jupyter笔记本的文件夹中。然后导入必要的库:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimportseabornassnsimportwarningswarnings.filterwarnings('ignore')%matplotlibinline载入数据: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)在探索数据时,常常会遇到数据缺失的问题。我们来看一下defmissingdata(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.ylabel('Percentofmissingvalues',fontsize=15)plt.title('Percentmissingdatabyfeature',fontsize=15)returnmsmissingdata(train_df)我们会看到这样的结果:舱号、年龄以及登船地的数据都有一些缺失值,而舱号信息有大量的缺失。我们需要对它们进行处理,也就是所谓的数据清理(DataCleaning)。数据清理我们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('checkthenanvalueintraindata')print(train_df.isnull().sum())完美!没有任何缺失数据了!这表示数据已经清理干净了。特征工程现在数据已经清理干净了。接下来我们要进行特征工程。特征工程基本上就是根据当前可用数据发现特征或数据的技术。有几种方法可以实现这种技术。在很多时候这都是常识。我们以登船地数据为例——这是用Q、S或C填充的数据。Python库不能处理这个,因为它只能处理数字。所以你需要用所谓的独热向量化(OneHotVectorization)来处理,它可以把一列变成三列。用0或1填充Embarked_Q、Embarked_S和Embarked_C,来表示这个人是不是从这个港口出发的。再以SibSp和Parch为例。这两列没有什么有趣的,但是你可能会想知道某个乘客有多少家人登上了这艘船。如果家人多的话可能会增加生存几率,因为他们可以互相帮助。从另一个角度说,单独登船的乘客可能很难生存下去。因此你可以创建新的一列,这一列是成员数量(familysize),familysize=SibSp+Parch+1(乘客自己)。最后一个例子是以bin列为例的。由于你认为很难区分具有相似值的事物,所以这种操作创建了值范围(rangesofvalues),然后将多个值组合在一起。比如,5岁和6岁的乘客之间有显著的差异吗?或者45和46岁的人之间有显著的差异吗?这就是创建bin列的原因。也许就年龄而言,我们可以创建4列——幼儿(0~14岁)、青少年(14~20岁)、成年人(20~40岁)以及年长的人(40岁以上)。编码如下:all_data=train_dffordatasetinall_data:dataset['FamilySize']=dataset['SibSp']+dataset['Parch']+1importre#Definefunctiontoextracttitlesfrompassengernamesdefget_title(name):title_search=re.search('([A-Za-z]+).',name)#Ifthetitleexists,extractandreturnit.iftitle_search:returntitle_search.group(1)return#CreateanewfeatureTitle,containingthetitlesofpassengernamesfordatasetinall_data:dataset['Title']=dataset['Name'].apply(get_title)#Groupallnon-commontitlesintoonesinglegroupingRarefordatasetinall_data:dataset['Title']=dataset['Title'].replace(['Lady','Countess','Capt','Col','Don','Dr','Major','Rev','Sir','Jonkheer','Dona'],'Rare')dataset['Title']=dataset['Title'].replace('Mlle','Miss')dataset['Title']=
本文标题:北大青鸟:Python机器学习介绍
链接地址:https://www.777doc.com/doc-4541826 .html