云计算 大数据 机器学习
云计算可以通过机器学习演算法来处理大数据,机器学习演算法指把人的决策思想转换成计算机可以理解的代码和模型,并可以通过数据的读入来优化自己的模型和决策,最终完成了一个机器大脑的构建,没有演算法就不能处理大数据,没有大数据就不能优化演算法的结果
举一个例子,谷歌搜索是如何与海量的用户互动的
在搜索框中输入关键词,进行搜索后会出现搜索结果页面,这个页面以一个列表显示,这个列表里的结果已经按照相关性大小进行排序,用户点击结果页面中的某一结果就完成了一次搜索
这2个极为简单的产品页面完成了客户反馈,一般好的搜索引擎搜索出的第一个结果即为最好的结果,是按照相关性大小进行降序排序的,用户越往下点击说明结果的相关性不够好。(用户点击搜索这个行为数据可以使机器学习演算法得到优化)
所以机器学习的反馈闭环,必须是业务的天然有机部分,通过这个循环来优化学习演算法的决策过程。
使用Python实现泰坦尼克号项目
首先回顾一下机器学习的具体步骤
1、提出问题
泰坦尼克号的故事中,导致这么多人遇难的原因之一就是乘客和船员没有足够的救生艇。在上船前,露丝 就像船长提出救生艇不够的问题。
虽然幸存下来的人运气有一些因素,但一些人比其他人更有可能生存,比如妇女,儿童和上层阶级。 翻船前,除了杰克与露丝的爱情,泰坦尼克号还经历了什么?
所以我们研究的问题是:什么样的人在泰坦尼克号中更容易存活?
2、理解数据
理解数据分为三部分:
1)采集数据:这一部分,根据研究问题,采集数据
2)导入数据:你要分析的数据可能在excel文件,或者资料库中,首先,你需要将数据导入到Python中的数据结构中。
3)查看数据集信息
2.1 采集数据
关于这次这个项目的数据,来自kaggle的泰坦尼克号项目,对于kaggle的了解和学习请看
kaggle
这个项目的地址为
https://www.kaggle.com/c/titanic#tutorials
点击Data即可进入数据下载页面,这里有三种文件,把文件下载
训练文件:用于建立模型
测试文件:使用模型对生产率进行预测,将预测结果提交给kaggle,kaggle会对模型正确率进行评估
提交结果案例文件:给参与者提供的参考结果
2.2 导入数据
下载好数据后导入pandas的数据框
可以看到测试数据比训练数据少一个变数,即生存率预测。这就是建立模型后要预测的值,使用测试数据里没有这个变数的值
查看这个数据
下图是列名的解析
查看这个数据集的描述统计信息,使用describe命令
发现年龄这一列比其他列的少,说明文件中存在缺失值,所以后面的数据处理阶段需要将缺失值处理
此外,船票价为0,可能是缺失的数值造成空值用0来代替,所以后面也要对这些值进行处理
注意describe只能看到数值类型的统计信息,其他类型的数据不显示
所以我们可以用下图的方法来查看数据
用info()方法查看每列的数据类型和总数
从返回的结果,行数为1309条,而年龄和船舱号有极大的数据缺失,登船港口和船票价格也分别有2个和1个数据缺失,这为下一步数据清洗指明方向,知道哪些列需要处理,我们才能有针对性的处理
3、数据清洗
数据清醒也是上一个内容 数据分析的基本过程 中的内容
1)、缺失数据处理
这里根据上一步用info()方法查看每列的数据类型和总数看出哪列需要对缺失值进行处理
数据类型缺失值处理
很多机器学习演算法为了训练模型,要求所传入的特征中不能有空值。 对于数据类型,处理缺失值最简单的方法就是用平均数来填充缺失值。
字元串类型缺失值处理
对于登船港口Embarked只有2个缺失数据,则用出现最频繁的值来填充这2个缺失值即可
缺失量过大缺失值处理
对于客舱号Cabin,缺失了1014条数据,缺失量过大,没有办法处理所以填充为U,未知unknown,把它标出来
#查看最终缺失值处理情况,记住生成情况(Survived)这里一列是我们的标签,用来做机器学习预测的,不需要处理这一列
就这样我们的数据清洗完毕,接下来用特征工程选取与生存率相关性较大的特征
2)、特征工程
什么是特征工程?
特征工程处理方法
如何获取哪些特征是比较重要的,并通过业务逻辑来提取特征,这需要和熟悉业务的业务员沟通,并将这些特征反映到代码中,通过实践和经验不断尝试产生新特征
以下是常用的三种提取特征方法
对于分类数据,会用会用数值来代替类别,例如性别1代表男性、0代表女性,对于超过2个类别,会进行One-hot编码
什么是One-hot编码,如下图
登船港口Embarked这一列里面的3种数值S、C、Q,通过One-hot编码,会为每一种类型别生成一个新特征,这个新特征称为虚拟变数或者哑变数,每一记录每一类别的值,某行的列值1表示乘客从这个港口上船,0则没有从这个港口上船
所以One-hot编码指若原始数据有n种类别,那么将这个特征扩展为n种特征,并当原始特征值为第i种定性值时,对应的第i个类别扩展属性为1,其他为0。
One-hot编码方式相比直接指定类别方式更为方便机器学习,不需要过多的调试
下面把各特征按照数据类型分类
3.2.1 分类数据:有直接类别的
性别
(1)乘客性别(Sex): 男性male,女性female
将性别的值映射为数值,男(male)对应数值1,女(female)对应数值0
登船港口(多种分类,是的为数值1,不是即标为数值0。使用one-hot编码,产生虚拟模块)
多种分类,是的为数值1,不是即标为数值0。使用one-hot编码,产生虚拟模块。
embarkedDf = pd.DataFrame() embarkedDf = pd.get_dummies( full[Embarked] , prefix=Embarked ) embarkedDf.head()
先添加one-hot编码产生的虚拟变数(dummy variables)到泰坦尼克号数据集full
full = pd.concat([full,embarkedDf],axis=1)
然后因为已经使用登船港口(Embarked)进行了one-hot编码产生了它的虚拟变数(dummy variables),所以这里把登船港口(Embarked)删掉。
full.drop(Embarked,axis=1,inplace=True) full.head()
客舱等级(Pclass)
3.2.2分类数据:字元串
姓名
从姓名中提取头衔,先将姓名列印出来看有什么特征
注意到在乘客名字(Name)中,有一个非常显著的特点:乘客头衔每个名字当中都包含了具体的称谓或者说是头衔,将这部分信息提取出来后可以作为非常有用一个新变数,可以帮助我们进行预测。
如Braund, Mr. Owen Harris
姓名的字元串格式: 名,头衔. 姓
这里我们可以做一个练习,看提取头衔的套路是什么
首先定义函数从姓名中获取头衔。用到split函数和strip(用于移除字元串头尾指定的字元,默认为空格
这是网上的头衔对应的含义
可客号
客舱号的首字母为其类别,可提取首字母进行分类使用
下面使用Python的lambda来创建匿名函数,有的函数比较简单,所以使用匿名函数比较简便
匿名函数指不使用def语句来标准定义一个函数,而使用 lambda 参数1,参数2:函数体 形式来定义函数,使用如下图
接下来使用匿名函数来获取客舱号的首字母作为类别
家庭类别
家庭人数=同代直系亲属数(Parch)+不同代直系亲属数(SibSp)+乘客自己
(因为乘客自己也是家庭成员的一个,所以这里加1)
家庭类别:
小家庭Family_Single:家庭人数=1
中等家庭Family_Small: 2<=家庭人数<=4
大家庭Family_Large: 家庭人数>=5
就这样我们提取了需要对数据进行处理的特征
3.3特征选择
下面我们用相关系数进行特征选择
我们先获得数据集的相关系数矩阵,到目前总共有26个特征
再查看各个特征与生成情况(Survived)的相关系数,可以看出哪些特征与生存情况有较高的相关性
正线性相关情况:
负线性相关情况:
根据各个特征与生成情况(Survived)的相关系数大小,我们选择这几个特征作为模型的输入:
头衔(前面所在的数据集titleDf)、客舱等级(pclassDf)、家庭大小(familyDf)、船票价格(Fare)、船舱号(cabinDf)、登船港口(embarkedDf)、性别(Sex)
4、构建模型
从这个原始数据集中拆分出训练数据集(记为train:用于模型训练)和测试数据集(记为test:用于模型评估)。
4.1建立训练数据集和测试数据集
从原始数据集中拆分出训练数据集(记为train:用于模型训练)和测试数据集(记为test:用于模型评估)。
接下来训练模型
预测泰坦尼克号上的人们生存或死亡是二分类问题,能进行分类的演算法很多,需要选择一个合适的演算法进行训练模型,我们从最简单的逻辑回归演算法开始,不像之前要去改变shape,使用sklearn的逻辑回归三行代码就可以搞定。
5、评估模型
评估模型使用的是测试数据。因为我们这里使用的是分类机器学习演算法,所以模型的score方法计算出的就是模型的准确率。
6、方案实施
使用预测数据集得到预测结果,并保存到csv文件中,上传到Kaggle中,就可以看到排名
这样就完成了自己第一个数据分析+机器学习项目了,经常去挑战Kaggle中的各种实践案例,相信数据分析的能力会越来越强。