目录

 

数据读取

数据处理

随机森林预测


数据读取

数据处理为机器学习入门基础,参考Kaggle比赛的数据库,开始简单入门数据处理,以titanic幸存者估计为例。

首先来看下训练集参数:

kaggle云服务器使用方法 kaggle save version_1024程序员节

训练集规模为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

kaggle云服务器使用方法 kaggle save version_python_02

注意到人员名称中有一系列头衔,如'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())

输出:可见,职业与存活率也有一定关系

kaggle云服务器使用方法 kaggle save version_人工智能_03

随机森林预测

import pandas as pd
from sklearn.ensemble import RandomForestClassifier

# 读取训练数据
train_data = pd.read_csv("H:/kaggle compete/titanic/train.csv")

# 读取训练数据
test_data = pd.read_csv("H:/kaggle compete/titanic/test.csv")

y = train_data["Survived"]
#使用以下5个标签数据
features = ["Pclass", "Sex", "SibSp", "Parch", "Fare","Age"]
X = pd.get_dummies(train_data[features])
X_test = pd.get_dummies(test_data[features])
#对缺省数据进行填充,这里把测试集Fare填充为0,测试集和训练集的Age填充为20
X_test["Fare"] = X_test['Fare'].fillna("0")
X_test["Age"] = X_test['Age'].fillna("20")
X["Age"] = X['Age'].fillna("20")
#采用随机森林模型进行预测
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
predictions = model.predict(X_test)

output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
output.to_csv('my_submission.csv', index=False)
print("Your submission was successfully saved!")

 这样一个简单的机器学习程序在测试集的准确率在0.78468左右

kaggle云服务器使用方法 kaggle save version_人工智能_04

原因:随机森林原理还有待进一步学习,这里仅仅进行调包操作,而且缺省值操作也是没有完全按照原则进行,如年龄就选取的很随意,参数选择也需要挑选