Python学习从0开始——Kaggle机器学习003总结

Python学习从0开始——Kaggle机器学习003总结

  • 一、加载及浏览数据
  • 二、机器学习模型
  • 三、模型验证
  • 四、欠拟合和过拟合
  • 五、随机森林

一、加载及浏览数据

# 路径
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
# 读取
melbourne_data = pd.read_csv(melbourne_file_path) 
# 总览
melbourne_data.describe()

输出在这里插入图片描述

二、机器学习模型

# 引入pandas
import pandas as pd

melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
# 所有列
melbourne_data.columns

输出:Index([‘Suburb’, ‘Address’, ‘Rooms’, ‘Type’, ‘Price’, ‘Method’, ‘SellerG’,
‘Date’, ‘Distance’, ‘Postcode’, ‘Bedroom2’, ‘Bathroom’, ‘Car’,
‘Landsize’, ‘BuildingArea’, ‘YearBuilt’, ‘CouncilArea’, ‘Lattitude’,
‘Longtitude’, ‘Regionname’, ‘Propertycount’], dtype=‘object’)

#将有缺失值的列设为不可用
melbourne_data = melbourne_data.dropna(axis=0)

#通过Dot符号来提取所需列
y = melbourne_data.Price
#通过数组提取目标列
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
X = melbourne_data[melbourne_features]
#查看数据
X.describe()
X.head()

输出
在这里插入图片描述

#使用sklearn创建模型
from sklearn.tree import DecisionTreeRegressor
#使用步骤
#Define: 是什么类型?决策树?其他类型的模型?还指定了模型类型的其他一些参数。
#Fit: 从提供的数据中捕获模式。这是建模的核心
#Predict: 预测
#Evaluate: 确定模型的预测的准确度

# 定义模型。为random_state指定一个数字,以确保每次运行的结果相同
melbourne_model = DecisionTreeRegressor(random_state=1)
# 使用已知数据训练模型
melbourne_model.fit(X, y)
# 预测未知数据
print(melbourne_model.predict(X.head()))

输出:
在这里插入图片描述

三、模型验证

通过指标分析模型质量,如平均绝对误差MAE(Mean Absolute Error)。

from sklearn.metrics import mean_absolute_error

predicted_home_prices = melbourne_model.predict(X)
#误差
mean_absolute_error(y, predicted_home_prices)

输出
在这里插入图片描述

scikit-learn库有一个函数train_test_split,用于将数据分成两部分,其中一些数据作为训练数据来拟合模型,其他数据作为验证数据来计算:

from sklearn.model_selection import train_test_split

#通过随机生成器分割,random_state保证每次分割相同
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 0)
#训练
melbourne_model = DecisionTreeRegressor()
melbourne_model.fit(train_X, train_y)
#预测
val_predictions = melbourne_model.predict(val_X)
print(mean_absolute_error(val_y, val_predictions))

输出
在这里插入图片描述

样本内数据的平均绝对误差约为500,样本外超过25万,这就是一个几乎完全正确的模型和一个不能用于大多数实际目的的模型之间的区别。
作为参考,验证数据中的平均房屋价值为110万,所以新数据的误差大约是平均房屋价值的四分之一。但是有很多方法可以改进,比如通过实验找到更好的特征或不同的模型类型。

四、欠拟合和过拟合

有方法测量模型的准确性,就可以尝试不同的模型以得出最好的预测。在scikit-learn的文档中决策树模型有许多选项,最重要的选项决定了树的深度。树的深度是它在做出预测之前进行分裂的次数。
在机器学习和深度学习中,过拟合(Overfitting)和欠拟合(Underfitting)是两种常见的问题,它们都与模型在训练数据上的表现和在未见过的测试数据上的泛化能力之间的关系有关。
过拟合指的是模型在训练数据上表现非常好,但在测试数据上表现较差的现象。这通常是因为模型过于复杂,以至于它“记住”了训练数据中的噪声和细节,而不是学习到了数据的普遍规律。因此,当模型面对新的、未见过的数据时,它无法正确地进行预测。
过拟合的表现:

  • 训练误差非常低,但测试误差很高。
  • 模型在训练数据上的表现很好,但在测试数据上的表现很差。
  • 模型对于训练数据中的噪声和异常值非常敏感。

解决过拟合的方法:

  • 增加数据量:更多的数据可以帮助模型学习到更普遍的规律,而不是仅仅记住训练数据。
  • 简化模型:减少模型的复杂度,例如减少神经网络的层数或神经元数量。
  • 正则化:在损失函数中添加正则化项,如L1正则化或L2正则化,以惩罚模型的复杂度。
  • 早停法(Early Stopping):在验证误差开始上升时停止训练。
  • 数据增强:通过旋转、缩放、裁剪等操作来增加训练数据的多样性。
  • 集成方法:如Bagging和Boosting,通过组合多个模型的预测结果来提高泛化能力。

欠拟合(Underfitting)
欠拟合指的是模型在训练数据上的表现就很差,更不用说在测试数据上了。这通常是因为模型过于简单,无法捕捉到数据中的复杂关系或规律。
欠拟合的表现:

  • 训练误差和测试误差都很高。
  • 模型无法对训练数据进行有效的预测。

解决欠拟合的方法:

  • 增加模型复杂度:例如增加神经网络的层数或神经元数量。
  • 使用更复杂的模型:例如从线性模型切换到非线性模型。
  • 减少正则化强度:如果使用了正则化,可以尝试减少正则化项的权重。
  • 检查数据质量:确保数据是正确标记的,并且没有过多的噪声或异常值。
  • 增加训练时间:确保模型已经充分训练,没有提前停止。

在实际应用中,通常需要在这两种问题之间找到一个平衡,以使模型在训练数据和测试数据上都有良好的表现。这通常需要一些试验和调优工作。
由于我们关心新数据的准确性,这是我们从验证数据中估计的,我们希望找到欠拟合和过拟合之间的最佳点。从视觉上看,我们需要下图中(红色)验证曲线的低点。

在这里插入图片描述

通过max_leaf_nodes参数来调整过拟合与欠拟合,我们允许模型生成的叶子越多,我们就越能从上图中的欠拟合区域移动到过拟合区域。

from sklearn.metrics import mean_absolute_error
from sklearn.tree import DecisionTreeRegressor

def get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y):
    model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes, random_state=0)
    model.fit(train_X, train_y)
    preds_val = model.predict(val_X)
    mae = mean_absolute_error(val_y, preds_val)
    return(mae)

# compare MAE with differing values of max_leaf_nodes
for max_leaf_nodes in [5, 50, 500, 5000]:
    my_mae = get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y)
    print("Max leaf nodes: %d  \t\t Mean Absolute Error:  %d" %(max_leaf_nodes, my_mae))

输出
在这里插入图片描述

所以此处500是最优数量。

五、随机森林

随机森林使用许多树,它通过平均每个组成树的预测来进行预测。它通常比单一决策树具有更好的预测准确性,并且在默认参数下工作得很好。

#通过随机森林建树
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

forest_model = RandomForestRegressor(random_state=1)
forest_model.fit(train_X, train_y)
melb_preds = forest_model.predict(val_X)
print(mean_absolute_error(val_y, melb_preds))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/676718.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么大家都要考CDA数据分析师认证

为什么学习数据分析? 2024年,是一个被数据影响的时代。数据,如同无形的燃料,驱动着现代社会的运转。从全球互联网的用户每天产生的2.5亿TB数据,到制造业的传感器、金融交易、医疗病历等领域的海量信息,数据…

排序算法——归并排序以及非递归实现

一、归并排序思想 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列…

使用Python绘制瀑布图

使用Python绘制瀑布图 瀑布图效果代码 瀑布图 瀑布图(Waterfall Chart)是一种数据可视化工具,用于展示累积数值的变化,尤其适合于展示随时间或过程中的增减变化。它通常用于财务分析,如展示收入、支出和净利润的变化过…

分离式光电液位传感器与浮球开关相比具有哪些优势

分离式光电液位传感器与浮球开关相比有哪些优势?分离式光电液位传感器依据光学原理,在传统光学传感器的基础上进行了改进。其特点是将光学组件分离出来,置于水箱外部感应,而传感器本身则独立于水箱外。这种设计有效解决了浮球开关…

CPU内部结构窥探·「1」

CPU内部逻辑运算单元是如何运行的 引言 中央处理器(CPU)是计算机的大脑,负责处理各种计算任务。在CPU里面,有一个重要的部分叫做逻辑运算单元(ALU,Arithmetic Logic Unit)。ALU就像一个超级计…

JS面试题:hash和history的区别

一、hash 模式和 history 模式的介绍 由于 Vue 项目为单页面应用,所以整个项目在开发和构建过程中,仅存在一个HTML物理文件。通过路由系统可以实现将项目的组件与可访问的URL路径进行绑定。由于Vue项目只有一个HTML物理文件,切换页面时既需要…

vivado BD_INTF_NET、BD_INTF_PIN

BD_INTF_NET 描述 接口是一组信号,它们共享一个共同的功能,同时包含 单个信号和多条总线。例如,AXI4Lite主机包含一个 单个信号的数量加上多条总线,这些都是制作 联系通过将这些信号和总线分组到一个接口中,Vivado IP积…

VisualStudio中:如果某个项目不显示SVN的show log等,而其他项目都正常

VisualStudio中:如果某个项目不显示SVN的show log等,而其他项目都正常。说明大概率是当前项目的问题,而不是VisualStudio的问题! 1.这个项目内有一个“隐藏”文件夹.svn 》先删除! 2.如果外层文件夹有红色感叹号&…

英伟达剧透新一代最强 GPU;奥特曼公开回应 AI 语音争议丨 RTE 开发者日报 Vol.217

开发者朋友们大家好: 这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

重学java 59.Properties属性集集合嵌套集合下总结

不要咀嚼小小悲观,而忘掉整个世界 —— 24.6.3 一、Properties集合(属性集) 1.概述 Properties 继承 于HashTable 2.特点 a、key唯一,value可重复 b、无序 c、无索引 d、线程安全 e、不能存null键,null值 f、Propertie…

idea项目maven下载依赖报错

报错: 1、Failure to find bad.robot:simple-excel:jar:1.0 in https://maven.aliyun.com/repository/public was cached in the local repository, resolution will not be reattempted until the update interval of aliyunmaven has elapsed or updates are forc…

小程序集arcgis地图显示自定义坐标的功能实现记录!(学习笔记)

最近再做一个新能源回收项目,项目中有个根据回收点坐标数据显示区域内回收点位置,点击图标直接导航到该位置,及分布的需求,研究了一下,实现效果如下,实现起来很简单,代码及效果 回收点位置及分…

Linux - 逻辑卷的创建和管理

1.逻辑卷LVM的创建 1.1 创建步骤 ①添加硬盘或者创建分区 ②创建物理卷 pvcreate ③创建卷组 vgcreate ④创建逻辑卷 lvcreate ⑤创建文件系统 mkfs.xfs/ect4/... ⑥创建挂…

随身wifi哪个牌子的最好用?网速最快的随身wifi推荐测评,随身wifi罗永浩推荐!

现在很多人都开始使用随身WiFi,因为互联网发达,看视频、刷抖音、看直播等等都需要流量,手机流量不够用,流量需求也很高。因此随身WiFi逐渐出现在人们的视野中,在众多品牌中一款名为格行的随身wifi被各明星和千万网红争…

Docker基础篇之本地镜像发布到阿里云

文章目录 1. 本地镜像发布到阿里云的流程2. 阿里云开发平台3. 将自己的本地镜像推送到阿里云 1. 本地镜像发布到阿里云的流程 阿里云ECS Docker生态如下图所示: 2. 阿里云开发平台 在控制台找到容器和镜像服务: 然后创建一个个人实例: 下面…

HW面试常见知识点2——研判分析(蓝队中级版)

🍀文章简介:又到了一年一度的HW时刻,本文写给新手想快速进阶HW蓝中的网安爱好者们, 通读熟练掌握本文面试定个蓝中还是没问题的!大家也要灵活随机应变,不要太刻板的回答) 🍁个人主页…

江大白 | 万字长文,AIGC算法工程师的面试秘籍,推荐收藏!

本文来源公众号“江大白”,仅用于学术分享,侵权删,干货满满。 原文链接:万字长文,AIGC算法工程师的面试秘籍,推荐收藏! 以下文章来源于微信公众号:WeThinkln 作者:Roc…

模块概述

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 模块的英文是Modules,可以认为是一盒(箱)主题积木,通过它可以拼出某一主题的东西。这与第6章介绍的函…

《互联网政务应用安全管理规定》电子邮件安全如何整改?

继上篇文章(解读《互联网政务应用安全管理规定》网络和数据安全中的身份认证和审计合规)之后,本篇文章继续解读第五章“电子邮件安全”,为党政机关事业单位提供电子邮件系统整改思路。 “电子邮件安全”内容从第三十一条到第三十…

机器学习的热门领域及应用趋势

机器学习的热门领域及应用趋势 近年来,机器学习(Machine Learning, ML)已经成为科技领域的热门话题,其在各个行业的应用越来越广泛和深入。本文将详细介绍当前机器学习的几个热门领域,以及人们在这些领域中使用的机器…