>백엔드 개발 >파이썬 튜토리얼 >ML을 통한 노트북 가격 예측

ML을 통한 노트북 가격 예측

Linda Hamilton
Linda Hamilton원래의
2025-01-03 10:13:41357검색

이전 게시물에서는 PCComponentes에서 웹 스크래핑을 수행하여 노트북 데이터로 CSV를 생성하는 스크립트를 만들었습니다.

이 아이디어는 제공하는 구성 요소에 따라 장치 가격을 예측하는 기계 학습 모델을 만들려고 할 때 발생했습니다. 그러나 조사 중에 모델을 훈련하는 데 사용할 수 있는 공개 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

R2가 1에 가까운 Random Forest와 GradientBoostingRegressor를 사용하여 최상의 결과를 얻었습니다.

더욱 개선하기 위해 Voting Regressor를 사용하여 이러한 알고리즘을 결합하여 R2 점수 0.8085를 달성했습니다.

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

결론

Voting Regressor로 훈련한 모델이 가장 효율적이었습니다. 이제 웹 애플리케이션에 통합할 준비가 되었습니다. 이에 대해서는 다음 게시물에서 자세히 설명하겠습니다.

프로젝트 링크

위 내용은 ML을 통한 노트북 가격 예측의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.