此次目的:
hello大家好,俺是没事爱瞎捣鼓又分享欲爆棚的叶同学!!!准备出几期博客来记录我学习kaggle数据科学入门竞赛的过程,顺便也将其中所学习到的知识分享出来。(所学主要的内容来自与b站大学恩师“编程教学-Python“的教学视频内容)
哎!前几天,俺还在享受快乐生活嘞,几天就到学校了!痛苦哎!而且第一次搬出来住,目前感觉良好,昨天回了趟宿舍,聚了个餐,带室友来俺出租屋逛了逛。说实话还行,没有暑假担心的那种孤独,可能是有自己的事情做(比如给你们分享博客哈哈哈哈),感受不到孤独吧哈哈哈哈哈!目前感觉还行,不过还没见到合租室友,中午和他们见见面吧!好了现在我们转入正题哈!
好了在数据科学和机器学习中,处理缺失值是一个常见且重要的步骤。在这篇博客中,我将带大家一步步了解如何通过使用 随机森林回归模型 来预测并填充缺失的 Age
数据。
如果有兄弟还不是很了解随机森林的话可以去看看下面这一篇博客哈!
1. 查看数据的概况
首先,使用 full.info()
查看数据集的概况,以确认哪些列存在缺失值。
full.info()
通过 full['Age'].notnull()
可以筛选出 Age
列中非空的行,并使用 corr()
函数计算数据集中各个特征之间的相关性系数:(绝对值大的说明影响大,相关性就越强)
#查看相关性系数corr()
#绝对值大的说明影响大
full[full['Age'].notnull()].corr()
2. 筛选与 Age
相关的特征
在填充缺失值之前,首先要挑选出可能与 Age
相关的特征。这些特征包括 Parch
(父母/子女数量)、Pclass
(舱位等级)、SibSp
(兄弟姐妹/配偶数量)、familyNum
(家庭成员数)、TickCom
(票号信息)以及 Title
(头衔)。
#筛选数据集
agePre = full[['Age', 'Parch', 'Pclass', 'SibSp', 'familyNum', 'TickCom', 'Title']]
由于某些特征可能是分类数据(如 Pclass
和 Title
),我们需要对它们进行 One-Hot 编码,将这些分类特征转换为数值特征。
这里的One-Hot编码如果有不了解的可以参考这篇文章哈!
agePre = pd.get_dummies(agePre)
完成编码后,可以通过相关性矩阵来看哪些特征与 Age
的相关性较高:
ageCorrDf = agePre.corr()
ageCorrDf['Age'].sort_values()
agePre.head()
4. 构建模型的数据集准备
接下来,我们将数据集拆分为两个部分:
ageKnown
:包含Age
值的记录,用于训练模型。ageUnKnown
:Age
值缺失的记录,用于后续的预测。
#建模
#拆分实验集和预测集
ageKnown = agePre[agePre['Age'].notnull()]
ageUnKnown = agePre[agePre['Age'].isnull()]
从 ageKnown
中分离出特征和标签:
#生成实验数据的特征和标签
ageKnown_X = ageKnown.drop(['Age'], axis=1)
ageKnown_y = ageKnown['Age']
同样,从 ageUnKnown
中分离出特征:
#生成预测数据特征
ageUnKnown_X = ageUnKnown.drop(['Age'], axis=1)
这行代码的目的是从 ageUnKnown
数据集中移除 Age
列,以便创建一个只包含特征(即独立变量)的数据集 ageUnKnown_X
,用于后续的预测。
5. 构建和训练随机森林模型
使用 随机森林回归模型 来预测缺失的年龄值:
#利用随机森林构建模型
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(random_state=None, n_estimators=500, n_jobs=-1)
rfr.fit(ageKnown_X, ageKnown_y)
1.导入 RandomForestRegressor
2. 初始化 RandomForestRegressor
模型
rfr = RandomForestRegressor(random_state=None, n_estimators=500, n_jobs=-1)
在这一行代码中,我们初始化了一个随机森林回归模型:
-
random_state=None
: 如果你希望结果是可重复的(即每次运行代码时结果相同),可以设置一个整数值作为随机种子。如果为None
,则每次运行代码可能会得到不同的结果,因为模型的随机性未被固定。 -
n_estimators=500
: 这是构建的决策树的数量。在这里我们选择了 500 棵树。更多的树通常可以提高模型的准确性,但也会增加计算成本。 -
n_jobs=-1
: 这是模型训练时使用的并行处理器数量。设置为-1
时,模型将使用所有可用的处理器核心,以加速训练过程。
3. 训练模型
rfr.fit(ageKnown_X, ageKnown_y)
这行代码是模型训练的核心部分:
ageKnown_X
: 这是输入特征集,即所有与Age
相关的特征,已经移除了Age
列。ageKnown_y
: 这是标签集,即Age
列的数据。
fit
函数会让随机森林回归模型在 ageKnown_X
和 ageKnown_y
上进行训练。模型将学习特征与年龄之间的关系,以便在之后预测缺失的 Age
值。
6. 预测和填充缺失值
首先,检查模型的得分:
#预测
#模型得分
score = rfr.score(ageKnown_X, ageKnown_y)
print('模型预测年龄得分是:', score)
然后,使用训练好的模型预测 Age
缺失的记录:
#预测年龄
ageUnKnown_predict = rfr.predict(ageUnKnown_X)
最后,将预测的年龄值填充回原始数据集中缺失的位置:
#填充预测数据
full.loc[full['Age'].isnull(), ['Age']] = ageUnKnown_predict
full.info() # 此时已无缺失值
总结
通过上述步骤,我们就可以成功使用随机森林回归模型预测并填充了数据集中缺失的年龄值啦。这不仅提高了数据集的完整性,也为后续的分析和建模打下了坚实的基础。加油!!!
彩蛋
昨天回学校,晚上出去聚餐,咱准备吃顿好的,结果采用了随缘吃法(不做计划,到地方再选店),结果很多店都爆满,没地方吃了,这是随机生成了一个点子哥,点子哥来自陕西,他说:“哎!我知道一家味道挺正宗的陕西小吃馆”。然后大餐就变成了眼前的(油泼面哈哈哈哈哈),不过味道确实不错(10元+1元加面)分量很足,然后拌开之后味道酸辣的,面也很筋道,还不错。然后另一张是今早拍的俺的新窝,怎么样,湖景放加飘窗哎,感觉还不错嘞!