在上一篇文章中,我建立了一個腳本來產生具有筆記型電腦資料的 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中文網其他相關文章!

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)

列表sandnumpyArraysInpythonHavedIfferentMemoryfootprints:listSaremoreFlexibleButlessMemory-效率,而alenumpyArraySareSareOptimizedFornumericalData.1)listsStorReereReereReereReereFerenceStoObjects,with withOverHeadeBheadaroundAroundaround64byty64-bitsysysysysysysysysyssyssyssyssysssyssys2)

toensurepythonscriptsbehavecorrectlyacrycrosdevelvermations,分期和生產,USETHESTERTATE:1)Environment varriablesForsimplesettings,2)configurationfilesfilesForcomPlexSetups,3)dynamiCofforComplexSetups,dynamiqualloadingForaptaptibality.eachmethodoffersuniquebeneiquebeneqeniquebenefitsandrefitsandrequiresandrequiresandrequiresca

Python列表切片的基本語法是list[start:stop:step]。 1.start是包含的第一個元素索引,2.stop是排除的第一個元素索引,3.step決定元素之間的步長。切片不僅用於提取數據,還可以修改和反轉列表。

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/刪除,2)儲存的二聚體和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,請考慮performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

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

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。