首页 > 后端开发 > Python教程 > 使用 ML 预测笔记本电脑价格

使用 ML 预测笔记本电脑价格

Linda Hamilton
发布: 2025-01-03 10:13:41
原创
353 人浏览过

在上一篇文章中,我创建了一个脚本来生成带有笔记本电脑数据的 CSV,在 PCComponentes 中进行网页抓取。

这个想法是在尝试创建一个机器学习模型时产生的,该模型根据您提供的组件来预测设备的价格。然而,在研究时我发现了一个可以用来训练模型的公共DataFrame,但它有一个问题:价格可以追溯到2015年,这使得它没什么用处。

出于这个原因,我决定直接从 PCComponentes 网站构建一个 DataFrame,这将使我能够获得更新且可靠的数据。此外,这个过程将来可能会实现自动化(至少在 PCComponentes 改变其网站结构之前)。

让我们开始吧!


DataFrame数据处理

在训练模型之前,需要对数据进行组织和清理,以使其更易于阅读和处理。为此,我们将使用广泛用于数据分析和处理的 Numpy、Pandas 和 Matplotlib 库。

第一件事是导入这些库并打开生成的 CSV:

import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  

登录后复制
登录后复制

然后,我们删除具有空值或 null 值的行:

df = df.dropna()  
登录后复制
登录后复制

数据分析与过滤

让我们首先分析可用的不同类型的 CPU。要查看它们,我们将使用 Seaborn 库:

import seaborn as sns  
sns.countplot(data=df, x='CPU')
登录后复制
登录后复制

Predicción de Precios de Portátiles con ML

Predicción de Precios de Portátiles con ML

这里我们看到有 207 种不同类型的 CPU。使用所有这些值训练模型可能会出现问题,因为大量数据将不相关并产生影响性能的噪声。

我们不会删除整个列,而是过滤最相关的值:

def cpu_type_define(text):
    text = text.split(' ')
    if text[0] == 'intel':
        if 'i' in text[-1]:
            if text[-1].split('-')[0] == 'i3':
                return 'low gamma intel processor'

            return text[0]+' '+text[1]+' '+text[-1].split('-')[0] 

        return 'low gamma intel processor'
    elif text[0] == 'amd':
        if text[1] == 'ryzen':
            if text[2] == '3':
                return 'low gamma amd processor'

            return text[0]+' '+text[1]+' '+text[2]

        return 'low gamma amd processor'
    elif 'm' in text[0]:
        return 'Mac Processor'
    else:
        return 'Other Processor'

data['Cpu'] = data['Cpu'].apply(cpu_type_define)
sns.histplot(data=data,x='Cpu')
data['Cpu'].value_counts()
登录后复制

结果:

Predicción de Precios de Portátiles con ML


GPU过滤

我们使用显卡 (GPU) 执行类似的过程,减少类别数量以避免数据中出现噪声:

def gpu_type_define(text):    

    if 'rtx' in text:

        num = int(''.join([char for char in text if char.isdigit()]))

        if num == 4080 or num == 4090 or num == 3080:
            return 'Nvidia High gamma'
        elif num == 4070 or num == 3070 or num == 4060 or num == 2080:
            return 'Nivida medium gamma'
        elif num == 3050 or num == 3060 or num == 4050 or num == 2070:
            return 'Nvidia low gamma'
        else:
            return 'Other nvidia grafic card'

    elif 'radeon' in text:

        if 'rx' in text:
            return 'Amd High gamma'
        else:
            return 'Amd low Gamma'

    elif 'gpu' in text:
        return 'Apple integrated graphics'

    return text



data['Gpu'] = data['Gpu'].apply(gpu_type_define)
sns.histplot(data=data,x='Gpu')
data['Gpu'].value_counts()  
登录后复制

结果:

Predicción de Precios de Portátiles con ML


存储和RAM处理

为了简化存储数据,我们将所有硬盘的总空间合并为一个值:

def fitler_ssd(text):
    two_discs = text.split('+')


    if len(two_discs) == 2:
        return int(''.join([char for char in two_discs[0] if char.isdigit()])) + int(''.join([char for char in two_discs[1] if char.isdigit()]))        
    else:
        return int(''.join([char for char in text if char.isdigit()]))

data['SSD'] = data['SSD'].str.replace('tb','000')
data['SSD'] = data['SSD'].str.replace('gb','')
data['SSD'] = data['SSD'].str.replace('emmc','')
data['SSD'] = data['SSD'].str.replace('ssd','')
登录后复制

最后,我们过滤 RAM 值以仅保留数字:

import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  

登录后复制
登录后复制

非数字数据编码

在训练模型之前,需要将非数字列转换为算法可以解释的数据。为此,我们使用 sklearn 库中的 ColumnTransformer 和 OneHotEncoder:

df = df.dropna()  
登录后复制
登录后复制

模型训练

我测试了几种机器学习算法,根据确定系数(R2 分数)确定哪一种算法最有效。结果如下:

Modelo R2 Score
Logistic Regression -4086280.26
Random Forest 0.8025
ExtraTreeRegressor 0.7531
GradientBoostingRegressor 0.8025
XGBRegressor 0.7556

使用随机森林和 GradientBoostingRegressor 获得了最佳结果,两者的 R2 都接近 1。

为了进一步改进,我使用投票回归器组合了这些算法,实现了 0.8085 的 R2 分数:

import seaborn as sns  
sns.countplot(data=df, x='CPU')
登录后复制
登录后复制

结论

使用投票回归器训练的模型是最有效的。现在您已准备好将其集成到网络应用程序中,我将在下一篇文章中详细解释。

项目链接

以上是使用 ML 预测笔记本电脑价格的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板