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

Laptop-Preisvorhersage mit ML

Linda Hamilton
Freigeben: 2025-01-03 10:13:41
Original
353 Leute haben es durchsucht

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  

Nach dem Login kopieren
Nach dem Login kopieren

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

df = df.dropna()  
Nach dem Login kopieren
Nach dem Login kopieren

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')
Nach dem Login kopieren
Nach dem Login kopieren

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()
Nach dem Login kopieren

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()  
Nach dem Login kopieren

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','')
Nach dem Login kopieren

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

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

Nach dem Login kopieren
Nach dem Login kopieren

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()  
Nach dem Login kopieren
Nach dem Login kopieren

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')
Nach dem Login kopieren
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage