目录
数据读取
数据处理
随机森林预测
数据处理为机器学习入门基础,参考Kaggle比赛的数据库,开始简单入门数据处理,以titanic幸存者估计为例。
首先来看下训练集参数:
训练集规模为891个人的基本信息
Passengerid:表示乘客的ID
Survived:表示幸存者,0表示死亡,1表示存活
Pclass:表示该乘客所处的舱位等级,由高到低分为1,2,3等舱
Name:表示姓名
Sex:表示性别
SibSp:表示兄弟、姐妹、配偶数(sister、brother、spouse)
Parch:表示父母、孩子数(parent、chidren)
Ticket:表示乘客的船票号
Fare:表示票价
Cabin:代表乘客所在的舱位
Embarked:代表乘客登船口岸
通过训练集参数可知,上述参数有些有缺省值,需特别注意对缺省值得处理。
查看表格中缺省值:返回值为true表示缺省,false表示不缺
#返回值为true表示缺省,false表示不缺 print(np.isnan(train_data["Age"]).any()) print(train_data.isnull().any()) print(test_data.isnull().any())缺省值处理方式:
(1)采用0填充:data.fillna(0)
(2)删除缺省值:data.dropna(inplace=True)
需要从数据集中读取并计算性别为女性的存活率:
train_data = pd.read_csv("H:/kaggle compete/titanic/train.csv") #单独罗列出women的存活情况 women = train_data.loc[train_data.Sex == 'female']["Survived"] female_Survived_rate = sum(women) / len(women)women的数据格式如下:第一列表示行索引值,这里没有行索引值,默认从0 开始,别和Passengerid搞混了,第二列表示Survived
注意到人员名称中有一系列头衔,如'Mr','Master','Major'等,所以可能职业对幸存者有一定的影响,先予以分析:
import re import pandas as pd import re train_data = pd.read_csv("H:/kaggle compete/titanic/train.csv") title_all_data = train_data.copy() # apply:当一个函数的参数存在于一个元组或者一个字典中时,用来间接的调用这个函数,并将元组或者字典中的参数按照顺序传递给参数 # lambda定义一个匿名函数,“:”前面的表示输入参数,后面的表示函数输出。 # str.replace('.','')表示用空字符替换掉"." title_all_data['title'] = title_all_data.Name.apply(lambda x: re.search('\w+\.', x).group()).str.replace('.', '') dic = { 'Mr': 'Mr', 'Mrs': 'Mrs', 'Miss': 'Miss', 'Master': 'Master', 'Don': 'Don', 'Rev': 'Rev', 'Dr': 'Dr', 'Mme': 'Mme', 'Ms': 'Ms', 'Major': 'Major', 'Lady': 'Lady', 'Sir' :'Sir', 'Mlle' : 'Mlle', 'Col' :'Col', 'Capt':'Capt', 'Countess': 'Countess', 'Jonkheer':'Jonkheer' } for titled_man in dic: survived = train_data.loc[title_all_data.title == titled_man]["Survived"] str=titled_man+":" print(str,sum(survived) / len(survived)) # print(title_all_data.head()) # unique函数去除其中重复的元素 # print(title_all_data.title.unique()) # print(title_all_data.info())输出:可见,职业与存活率也有一定关系
这样一个简单的机器学习程序在测试集的准确率在0.78468左右
原因:随机森林原理还有待进一步学习,这里仅仅进行调包操作,而且缺省值操作也是没有完全按照原则进行,如年龄就选取的很随意,参数选择也需要挑选