实现该模型的训练要用到的主要算法和实现思路是
""" 项目:泰坦尼克号乘客生存预测 主要算法:决策树\随机森林 实现思路: 1、导包 2、读取数据 3、对数据进行基本处理 4、特征工程 5、决策树预估器流程 6、模型评估 """
首先的首先当然是导包啦
# 1、导包
import pandas as pd # 读取文件用的 from sklearn.feature_extraction import DictVectorizer # 用来进行字典特征抽取 from sklearn.tree import DecisionTreeClassifier #决策树 from sklearn.model_selection import GridSearchCV # 网格搜索和CV(交叉验证) from sklearn.ensemble import RandomForestClassifier # 随机森林
然后就是读取文件里面的数据进来了
# 2、读取数据
train = pd.read_csv('train.csv') test = pd.read_csv('test.csv') y_test = pd.read_csv('gender_submission.csv')
数据集下载:百度网盘
链接:https://pan.baidu.com/s/1slaouE4Es37U8u0U-kDJnw
提取码:ss5o
接着是进行对数据进行基本的处理了,以下是作者的处理方法:
第一步是把多余的特征去除,选取出有用的特征,作者认为,在数据集里面有用的有"Pclass","Age","Sex"三个,所以我对它进行提取出来
# 3、对数据进行基本处理
# 1)选取有用的数据 x_train = train[["Pclass","Age","Sex"]] y_train = train["Survived"] x_test = test[["Pclass","Age","Sex"]]
第二步是把缺失值给填充为平均值。对于缺失值有两种处理方式,一是如果该特征不重要,直接删除便是,二是填充平均值或众数
# 2)缺失值处理:用平均值填充 x_train["Age"].fillna(x_train["Age"].mean(),inplace=True) x_test["Age"].fillna(x_train["Age"].mean(),inplace=True) # .fillna()是用来把括号里的值填充进空值里,里面的inplace是决定是否要在自身进行修改 # .mean()是取到其平均值
第三步是把数据转化成字典类型
# 3)转换成字典 x_train = x_train.to_dict(orient="records") x_test = x_test.to_dict(orient="records") “““
orient 控制的是转换成的字典的形式 orient =‘dict’,是函数默认的,转化后的字典形式:{column(列名) : {index(行名) : value(值) )}}; orient =‘list’ ,转化后的字典形式:{column(列名) :{[ values ](值)}}; orient =‘series’ ,转化后的字典形式:{column(列名) : Series (values) (值)}; orient =‘split’ ,转化后的字典形式:{‘index’ : [index],‘columns’ :[columns],’data‘ : [values]}; orient =‘records’ ,转化后是 list形式:[{column(列名) : value(值)}…{column:value}]; orient =‘index’ ,转化后的字典形式:{index(值) : {column(列名) : value(值)}}; ”””
下一步是进行特征工程,把数据处理成计算机能看懂的鸭子
# 4、特征工程
# 1)实例化两个转换器 transfer = DictVectorizer()
# 2)使用转换器
x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) “““ 注:以上x_test是用transform方法,是应为fit_transform方法实际上可以分为两个方法, 一个是fit,一个是transform,fit是用来计算数据的标准差和平均数,transform是用来 转化数据的,在第一次使用fit_transform时,transfer里面已经通过fit得到了x_train 的标准差和平均值了,为了数据标准化更加真实,所以x_test也要用一样的标准差和平均值, 这就是x_test使用transform的原因 ”””
最后就是使用决策树算法了
# 5、决策树预估器流程 # 实例化预估器 es = DecisionTreeClassifier(criterion="entropy") # 添加网格搜索和CV es = GridSearchCV(es,param_grid={"max_depth":[1,2,3,4,5,6,7,8,9]},cv=3) # 6、模型评估 # 使用预估器 es.fit(x_train, y_train) # 查看准确率 print(es.score(x_test, y_test["Survived"])) # 查看最佳数据 print("最佳深度:",es.best_params_) print("最佳成绩:",es.best_score)
另外一个就是也可以用随机森林的算法
# 5、随机森林预估器流程 # 使用随机森林进行解决 est = RandomForestClassifier() # 添加网格搜索和CV est = GridSearchCV(est,param_grid={"n_estimators":[10,20,40,80,160,320,640,1280]},cv=3) # 使用 est.fit(x_train, y_train) # 6、模型评估 # 查看准确率 print(est.score(x_test, y_test["Survived"])) # 查看最好参数 print("最好的树数量:",est.best_params_) print("最佳成绩:",est.best_score_)
如此下来,我们便完成了一个关于泰坦尼克号乘客生存预测的模型辣!
(ps:该随笔是作者一边学习一边写的,里面有一些自己的拙见,如果有错误或者哪里可以改正的话,还请大家指出并批评改正!)
标签:fit,百度网,内附,transform,train,test,字典,orient,决策树 From: https://www.cnblogs.com/zrold/p/17588754.html