Heim >Backend-Entwicklung >Python-Tutorial >Laptop-Preisvorhersage mit ML

Laptop-Preisvorhersage mit ML

Linda Hamilton
Linda HamiltonOriginal
2025-01-03 10:13:41398Durchsuche

In meinem vorherigen Beitrag habe ich ein Skript erstellt, um eine CSV-Datei mit Laptop-Daten zu generieren und dabei Web Scraping in PCComponentes durchzuführen.

Diese Idee entstand, als versucht wurde, ein Modell für maschinelles Lernen zu erstellen, das abhängig von den von Ihnen bereitgestellten Komponenten den Preis des Geräts vorhersagt. Bei der Recherche habe ich jedoch einen öffentlichen DataFrame gefunden, mit dem das Modell trainiert werden konnte, der allerdings ein Problem hatte: Die Preise datierten bis ins Jahr 2015, weshalb er kaum von Nutzen war.

Aus diesem Grund habe ich beschlossen, einen DataFrame direkt von der PCComponentes-Website zu erstellen, der es mir ermöglichen würde, über aktuelle und zuverlässige Daten zu verfügen. Darüber hinaus könnte dieser Prozess in Zukunft automatisiert werden (zumindest bis PCComponentes die Struktur seiner Website ändert).

Lasst uns loslegen!


DataFrame-Datenverarbeitung

Vor dem Training des Modells müssen die Daten organisiert und bereinigt werden, um das Lesen und Verarbeiten zu erleichtern. Hierzu verwenden wir die Bibliotheken Numpy, Pandas und Matplotlib, die in der Datenanalyse und -verarbeitung weit verbreitet sind.

Der erste Schritt besteht darin, diese Bibliotheken zu importieren und die generierte CSV-Datei zu öffnen:

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

Dann löschen wir die Zeilen mit leeren oder Nullwerten:

df = df.dropna()  

Datenanalyse und Filterung

Beginnen wir mit der Analyse der verschiedenen verfügbaren CPU-Typen. Um sie anzuzeigen, verwenden wir die Seaborn-Bibliothek:

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

Hier sehen wir, dass es 207 verschiedene Arten von CPUs gibt. Das Training eines Modells mit all diesen Werten könnte problematisch sein, da viele Daten irrelevant wären und Rauschen erzeugen würden, das die Leistung beeinträchtigen würde.

Anstatt die gesamte Spalte zu entfernen, filtern wir die relevantesten Werte:

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()

Ergebnis:

Predicción de Precios de Portátiles con ML


GPU-Filterung

Wir führen einen ähnlichen Prozess mit Grafikkarten (GPU) durch und reduzieren dabei die Anzahl der Kategorien, um Rauschen in den Daten zu vermeiden:

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()  

Ergebnis:

Predicción de Precios de Portátiles con ML


Speicher- und RAM-Behandlung

Um die Speicherdaten zu vereinfachen, fassen wir den Gesamtspeicherplatz aller Festplatten zu einem einzigen Wert zusammen:

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','')

Zuletzt filtern wir die RAM-Werte, um nur Zahlen beizubehalten:

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


Nicht-numerische Datenkodierung

Vor dem Training des Modells müssen die nicht numerischen Spalten in Daten umgewandelt werden, die der Algorithmus interpretieren kann. Hierzu verwenden wir den ColumnTransformer und OneHotEncoder aus der sklearn-Bibliothek:

df = df.dropna()  

Modelltraining

Ich habe mehrere Algorithmen für maschinelles Lernen getestet, um festzustellen, welcher gemäß dem Bestimmtheitsmaß (R2-Score) am effizientesten war. Hier sind die Ergebnisse:

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

Die besten Ergebnisse wurden mit Random Forest und GradientBoostingRegressor erzielt, beide mit einem R2 nahe 1.

Um mich weiter zu verbessern, habe ich diese Algorithmen mit einem Abstimmungsregressor kombiniert und einen R2-Score von 0,8085 erreicht:

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

Abschluss

Das mit dem Voting Regressor trainierte Modell war am effizientesten. Jetzt sind Sie bereit, es in eine Webanwendung zu integrieren, was ich im nächsten Beitrag ausführlich erläutern werde.

Link zum Projekt

Das obige ist der detaillierte Inhalt vonLaptop-Preisvorhersage mit ML. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn