首頁 >後端開發 >Python教學 >使用 ML 預測筆記型電腦價格

使用 ML 預測筆記型電腦價格

Linda Hamilton
Linda Hamilton原創
2025-01-03 10:13:41372瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn