[PYTHON] [Für Anfänger] Kaggle-Übung (Merucari)

Dieses Mal habe ich im Rahmen des Trainings am vergangenen Kaggle-Wettbewerb gearbeitet. Ich habe versucht, es kurz zusammenzufassen.

Mercari Price Suggestion Challenge

Aus den Produktinformationen von Mercari werden wir den Preis mithilfe der Ridge-Regression vorhersagen.

1. Vorbereitung des Moduls


import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import LabelBinarizer
from scipy.sparse import csr_matrix, hstack
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_log_error

## 2. Datenaufbereitung Lesen Sie die Daten.

train = pd.read_csv('train.tsv', sep='\t')
test = pd.read_csv('test.tsv', sep='\t')

Überprüfen Sie die Anzahl der Daten.


print(train.shape)
print(test.shape)

# (1482535, 8)
# (693359, 7)

Zug- und Testdaten kombinieren.


all_data = pd.concat([train, test])
all_data.head()

image.png

Überprüfen Sie die grundlegenden Informationen der Daten.


all_data.info(null_counts=True)

'''
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2175894 entries, 0 to 693358
Data columns (total 9 columns):
brand_name           1247687 non-null object
category_name        2166509 non-null object
item_condition_id    2175894 non-null int64
item_description     2175890 non-null object
name                 2175894 non-null object
price                1482535 non-null float64
shipping             2175894 non-null int64
test_id              693359 non-null float64
train_id             1482535 non-null float64
dtypes: float64(3), int64(2), object(4)
memory usage: 166.0+ MB
'''

Untersuchen Sie die eindeutige Anzahl der einzelnen Spaltendaten (keine Duplikate zählen).


print(all_data.brand_name.nunique())
print(all_data.category_name.nunique())
print(all_data.name.nunique())
print(all_data.item_description.nunique())

# 5289
# 1310
# 1750617
# 1862037

## 3. Vorbehandlung Verarbeiten Sie die Daten für jede Spalte vor.

Da es diesmal viele Zeichendaten gibt, werden wir die Daten mit BoW-Vektor und TF-IDF anordnen.

Zu diesem Zeitpunkt wird die Datenmenge für andere kennzeichnungscodierte Features zu groß. Konvertieren Sie es in eine Sparse-Matrix (Matrix mit vielen 0 Komponenten = Sparse-Matrix) und komprimieren Sie es.

# name

cv = CountVectorizer()
name = cv.fit_transform(all_data.name)

# item_description

all_data.item_description.fillna(value='null', inplace=True)

tv = TfidfVectorizer()
item_description = tv.fit_transform(all_data.item_description)

# category_name

all_data.category_name.fillna(value='null', inplace=True)

lb = LabelBinarizer(sparse_output=True)
category_name = lb.fit_transform(all_data.category_name)
# brand_name

all_data.brand_name.fillna(value='null', inplace=True)

brand_name = lb.fit_transform(all_data.brand_name)

# item_condition_id, shipping

onehot_cols = ['item_condition_id', 'shipping']
onehot_data = csr_matrix(pd.get_dummies(all_data[onehot_cols], sparse=True))

Kombinieren Sie diese Daten schließlich und konvertieren Sie sie in spärliche Matrixdaten.


X_sparse = hstack((name, item_description, category_name, brand_name, onehot_data)).tocsr()

## 4. Erstellen Sie ein Modell Informationen zu Join-Daten all_data Die Zugdaten haben eine objektive Variable, die Testdaten jedoch nicht Halten Sie die Datenmenge in X auf der gleichen Größe wie y (= Anzahl der Zeilen mit Übertragungsdaten).
nrows = train.shape[0]
X = X_sparse[:nrows]

Da y (Preisdaten) Abweichungen in den Daten aufweist, wirkt sich dies auf die Prognoseergebnisse aus. Standardisierung ist in Ordnung, aber dieses Mal werde ich eine logarithmische Konvertierung durchführen.

Zusätzlich wird die Konvertierung mit $ \ log (y + 1) $ durchgeführt, so dass es kein Problem gibt, selbst wenn der Wert von y 0 ist.


y = np.log1p(train.price)
y[:5]

'''
0    2.397895
1    3.970292
2    2.397895
3    3.583519
4    3.806662
Name: price, dtype: float64
'''

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

ridge = Ridge()
ridge.fit(X_train, y_train)

'''
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)
'''

## 5. Leistungsbewertung

y_pred = ridge.predict(X_test)

Dieses Mal werden wir anhand des RMSE-Index (für den Wettbewerb leicht verbessert) bewerten.

Ich habe y vor dem Modellieren logarithmisch konvertiert, daher muss ich es nach dem Modellieren rückgängig machen. Die Verarbeitung erfolgt in der Bewertungsformel.


def rmse(y_test, y_pred):
    return np.sqrt(mean_squared_log_error(np.expm1(y_test), np.expm1(y_pred)))

rmse(y_test, y_pred)

# 0.4745184301527575

Aus dem oben Gesagten konnten wir den Preis anhand der Produktinformationen von Mercari vorhersagen und bewerten.

Dieses Mal habe ich einen Artikel für Anfänger zusammengestellt. Wenn Sie es hilfreich finden, würde ich es begrüßen, wenn Sie LGBT machen könnten.

Danke fürs Lesen.

Recommended Posts

[Für Anfänger] Kaggle-Übung (Merucari)
[Für Kaggle-Anfänger] Titanic (LightGBM)
Python-Übungen für Anfänger # 2 [für Anweisung / while-Anweisung]
[Kaggle für Super-Anfänger] Titanic (Logistic Return)
Herausforderungen des Titanic-Wettbewerbs für Kaggle-Anfänger
Spacemacs-Einstellungen (für Anfänger)
Python Lehrbuch für Anfänger
Dikstra-Algorithmus für Anfänger
OpenCV für Python-Anfänger
Python-Übung für Anfänger # 1 [Grundlegende Datentypen / If-Anweisungen]
Erster Kaggle (Kaggle ①)
Lernablauf für Python-Anfänger
Empfohlene Linux-Distribution für Anfänger
■ Kaggle-Übung für Anfänger - Einführung von Python - von Google Colaboratory
CNN (1) zur Bildklassifizierung (für Anfänger)
Python3-Umgebungskonstruktion (für Anfänger)
Übersicht über Docker (für Anfänger)
Python #Funktion 2 für Super-Anfänger
Seaborn Basics für Anfänger ④ Pairplot
Grundlegende Python-Grammatik für Anfänger
100 Pandas klopfen für Python-Anfänger
Python #Funktion 1 für Super-Anfänger
Python #Liste für Super-Anfänger
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
Linux Command Memorandum [für Anfänger]
Praktische Linux-Verknüpfung (für Anfänger)
[Erklärung für Anfänger] TensorFlow-Tutorial MNIST (für Anfänger)
Pandas Grundlagen für Anfänger ① Lesen & Verarbeiten
TensorFlow MNIST Für ML Anfänger Übersetzung
Entscheidungsbaum (für Anfänger) -Code Edition-
Pandas Grundlagen für Anfänger ⑧ Ziffernverarbeitung
[Für Nicht-Programmierer] Wie man Kaggle läuft
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 1
Seaborn Grundlagen für Anfänger ② Histogramm (Distplot)
[Für Anfänger] Django -Entwicklungsumgebung Bau-
[Für Anfänger] Skript innerhalb von 10 Zeilen (1.folium)
Logistic Return (für Anfänger) -Code Edition-
Was ist Schaben? [Zusammenfassung für Anfänger]
Python #index für Super-Anfänger, Slices
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
TensorFlow Tutorial MNIST Für ML-Anfänger
Häufig verwendete Linux-Befehle (für Anfänger)
[Muss für Anfänger] Grundlagen von Linux
Python #len Funktion für Super-Anfänger
Web Scraping für Anfänger in Python (1)
Führen Sie unittest in Python aus (für Anfänger)
Was ist xg boost (1) (für Anfänger)
Web Scraping für Anfänger in Python (4) -1
Python #Hello World für Super-Anfänger
Lineare Regression (für Anfänger) -Code Edition-
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 2
Pandas Basics Summary Link für Anfänger
[Für Anfänger] Prozessüberwachung mit cron
LSTM (1) zur Zeitreihenvorhersage (für Anfänger)
[Veraltet] Chainer v1.24.0 Anfänger-Tutorial
TensorFlow Tutorial -MNIST Für ML-Anfänger
Ridge Return (für Anfänger) -Code Edition-
Annäherungserklärung für Anfänger, um in Kaggle Titanic_3 unter den besten 1,5% (0,83732) zu sein
Annäherungserklärung für Anfänger, um in Kaggle Titanic_1 unter den besten 1,5% (0,83732) zu sein