在上一篇文章中,我创建了一个脚本来生成带有笔记本电脑数据的 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')
这里我们看到有 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()
结果:
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()
结果:
存储和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中文网其他相关文章!

ForhandlinglargedatasetsinPython,useNumPyarraysforbetterperformance.1)NumPyarraysarememory-efficientandfasterfornumericaloperations.2)Avoidunnecessarytypeconversions.3)Leveragevectorizationforreducedtimecomplexity.4)Managememoryusagewithefficientdata

Inpython,ListSusedynamicMemoryAllocationWithOver-Asalose,而alenumpyArraySallaySallocateFixedMemory.1)listssallocatemoremoremoremorythanneededinentientary上,respizeTized.2)numpyarsallaysallaysallocateAllocateAllocateAlcocateExactMemoryForements,OfferingPrediCtableSageButlessemageButlesseflextlessibility。

Inpython,YouCansspecthedatatAtatatPeyFelemereModeRernSpant.1)Usenpynernrump.1)Usenpynyp.dloatp.dloatp.ploatm64,formor professisconsiscontrolatatypes。

NumPyisessentialfornumericalcomputinginPythonduetoitsspeed,memoryefficiency,andcomprehensivemathematicalfunctions.1)It'sfastbecauseitperformsoperationsinC.2)NumPyarraysaremorememory-efficientthanPythonlists.3)Itoffersawiderangeofmathematicaloperation

Contiguousmemoryallocationiscrucialforarraysbecauseitallowsforefficientandfastelementaccess.1)Itenablesconstanttimeaccess,O(1),duetodirectaddresscalculation.2)Itimprovescacheefficiencybyallowingmultipleelementfetchespercacheline.3)Itsimplifiesmemorym

SlicingaPythonlistisdoneusingthesyntaxlist[start:stop:step].Here'showitworks:1)Startistheindexofthefirstelementtoinclude.2)Stopistheindexofthefirstelementtoexclude.3)Stepistheincrementbetweenelements.It'susefulforextractingportionsoflistsandcanuseneg

numpyallowsforvariousoperationsonArrays:1)basicarithmeticlikeaddition,减法,乘法和division; 2)evationAperationssuchasmatrixmultiplication; 3)element-wiseOperations wiseOperationswithOutexpliitloops; 4)

Arresinpython,尤其是Throughnumpyandpandas,weessentialFordataAnalysis,offeringSpeedAndeffied.1)NumpyArseNable efflaysenable efficefliceHandlingAtaSetSetSetSetSetSetSetSetSetSetSetsetSetSetSetSetsopplexoperationslikemovingaverages.2)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3汉化版
中文版,非常好用

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。