第一步是从Kaggle官网下载泰坦尼克号救援预测分析案例数据,第二步是在浏览器中打开Jupiter并选择Python,第三步是上传泰坦尼克号救援预测分析案例数据。
第四步是数据预处理。即读取数据并使用.describe()显示汇总数据。这是代码:
进口熊猫
泰坦尼克号=pandas.read_csv('train.csv')
泰坦尼克号.describe()
运行后你会得到如下结果
各列字段数据的统计结果显示,年龄数据缺失。您可以在此处查看数据源检查
您可以看到Age 列缺少值。
第五步,填写缺失值。您可以使用平均值来填充缺失值,而不是取最大值或最小值。
泰坦尼克号['年龄']=泰坦尼克号['年龄'].fillna(泰坦尼克号['年龄'].median())
泰坦尼克号.describe()
#titanic['Age'].median(),这是表的年龄列的中值。
#fillna(titanic['Age'].median()),填充年龄列中位数的中值。
#titanic['Age'].fillna(titanic['Age'].median()),用age列中中值的中位数填充age列中的空值
完成后,输出数据将如下所示显示,您会注意到Age 列不再为空值。
第六步,处理字符数据,将其转换为数值数据。原因是机器算法无法处理字符类型,而算法分类可以通过将字符类型转换为数字类型来完成。在数据源中,可以看到性别列是字符。您可以将男性指定为0。女性的值被指定为1。
titanic.loc[titanic['Sex']=='male','Sex']=0, #将male替换为0
titanic.loc[titanic['Sex']=='female','gender']=1, #将female替换为1
print(titanic['Sex'].unique()), #在Sex列中显示唯一值
运行效果如下。
同样,将Embarked 列中的字母S、C 和Q 更改为0、1 和2。
在此之前,您可以检查该列的唯一值是什么。
执行结果显示nan,代表NULL值。所以你可以先输入其他点。这里还可以统计S、C、Q三个点中哪一个点的点数多。您可以选择更多点。需要填写的点。
从上面的统计结果可以看出,S点的乘客人数最多,因此将缺失的登机点填为S。填充完成后统计显示S增加了2,说明数据只少了2。
您还可以打印列的唯一值以确保不存在缺失值。
接下来,将Embarked 列中的字母S、C 和Q 更改为0、1 和2。如果您先赋值,然后打印唯一值,您将看到字符已成功替换。
就我们的目的而言,预测要么被救助,要么不被救助。 0表示未救援,1表示救援成功。
第七步,选择特征指标,选择算法,进行预测。
1.选择回归模型预测
1)线性回归、拟合。
运行此代码一次会产生令人惊讶的糟糕结果,第二次运行会报告错误。发生了什么?
2)通常,逻辑回归用于分类,但这里Cross_val_score也用于交叉验证。执行结果如下
运行结果是0.79……不是很理想,不是很准确,不是很有效。
3)选择下面更高级的算法——随机森林。
从sklearn 导入model_selection
from sklearn.ensemble import RandomForestClassifier,这里我们称之为随机森林
detectors=['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked'],这里我们选择一些可以影响救援的参数。
alg=RandomForestClassifier(random_state=1,n_estimators=10,min_samples_split=2,min_samples_leaf=1)。数字10代表10棵决策树,数字2和1用于控制停止分裂决策树的条件。
kf=model_selection.KFold(n_splits=3, shuffle=True, random_state=1)
scroes=model_selection.cross_val_score(alg, 泰坦尼克号[预测器], 泰坦尼克号['生存'],cv=kf)
#再次使用3次交叉验证。
print(scores.mean())#打印预测准确率
上述代码运行结果如下:
我们可以看到,准确率与回归模型预测的结果相同。接下来,调整决策树参数并检查预测精度。
决策树数量改为100,停止分裂参数分别为4和2。准确度没有改变。还是一样吗?为什么?需要解决办法吗?
2. 特征选择
在原有特征的基础上,添加兄弟姐妹数量['Sibsp]、儿童或老人数量['Parch']、身份['Mr、Miss、Dr.']、名词等特征。长度和其他特征。看看您是否可以进一步提高预测准确性。
#添加以下两个功能。
泰坦尼克号['家庭规模']=泰坦尼克号['SibSp']+泰坦尼克号['Perch']
泰坦尼克号['名称长度']=泰坦尼克号['名称'].apply(lambda x: len(x))
#将名称中包含的ID转换为数字
重新导入
def get_title(名称):
title_search=re.search('([A-Za-z]+)\.',名称)
对于title_search:
返回title_search.group(1)
返回''
标题=泰坦尼克号['名称'].apply(get_title)
打印(pandas.value_counts(标题))
title_mapping={'先生':1,'小姐':2,'夫人':3,'大师':4,'博士':5,'Rev':6,'少校':7,'上校':7,'女士':8,'Mme ':8、'唐':9、'女士':10、'伯爵夫人':10、'约翰·凯尔':10、'先生':9、'船长':7、'先生':2}
对于title_mapping.items(): 中的k,v
标题[标题==k]=v
打印(pandas.value_counts(标题))
泰坦尼克号['标题']=标题
执行结果如下。
绘制特征以查看哪些特征最显着
将numpy 导入为np
从sklearn.feature_selection 导入SelectKBest、f_classif
将matplotlib.pyplot 导入为plt
detectors=['Pclass','性别','年龄','SibSp','Parch','票价','登船','家庭规模','头衔','NameLength']
选择器=SelectKBest(f_classif,k=5)
选择器.fit(泰坦尼克号[预测器],泰坦尼克号['生存'])
疮=-np.log10(selector.pvalues_)
plt.bar(范围(len(预测变量)), 分数)
plt.xticks(范围(len(预测器)),预测器,旋转='垂直')
plt.show()
Predictor=['P 舱位','性别','票价','职称']
alg=RandomForestClassifier(random_state=1,n_estimators=50,min_samples_split=8,min_samples_leaf=4)
手术结果如何?图像没有出现?
我尝试按照视频进行操作,但感到很困惑。请帮我找出问题所在。谢谢。
标题:泰坦尼克再揭秘,泰坦尼克遇难记
链接:https://www.7kxz.com/news/gl/23117.html
版权:文章转载自网络,如有侵权,请联系删除!