ホームページ >バックエンド開発 >Python チュートリアル >ML を使用したラップトップの価格予測

ML を使用したラップトップの価格予測

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-03 10:13:41357ブラウズ

前の投稿では、PCComponentes で Web スクレイピングを実行し、ラップトップ データを含む CSV を生成するスクリプトを作成しました。

このアイデアは、提供するコンポーネントに応じてデバイスの価格を予測する機械学習モデルを作成しようとしたときに生まれました。しかし、調査中にモデルのトレーニングに使用できる公開データフレームを見つけましたが、問題がありました。価格が 2015 年に遡り、ほとんど役に立ちませんでした。

このため、更新された信頼性の高いデータを取得できるように、PCComponentes Web サイトから直接 DataFrame を構築することにしました。さらに、このプロセスは将来的には自動化される可能性があります (少なくとも PCComponentes が Web サイトの構造を変更するまで)。

それでは始めましょう!


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の処理

ストレージ データを簡素化するために、すべてのハード ドライブの合計容量を 1 つの値に結合します。

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

最良の結果は、R2 が 1 に近い Random Forest と GradientBoostingRegressor で得られました。

さらに改善するために、投票リグレッサーを使用してこれらのアルゴリズムを組み合わせ、R2 スコア 0.8085 を達成しました。

import seaborn as sns  
sns.countplot(data=df, x='CPU')

結論

投票リグレッサーでトレーニングされたモデルが最も効率的でした。これで、これを Web アプリケーションに統合する準備が整いました。これについては、次の投稿で詳しく説明します。

プロジェクトへのリンク

以上がML を使用したラップトップの価格予測の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。