Premiers pas avec le Machine Learning avec Spark "Price Estimate" # 1 Chargement des ensembles de données avec Apache Spark (Java)

Aperçu

-Introduction à l'apprentissage automatique avec ** Java ** et ** Apache Spark **

[^ 1]: L'arbre d'amplification de dégradé dans ** spark.ml ** de Spark est le populaire ** LightGBM **, ** XGBoost ** (si vous sélectionnez le modèle d'arbre) et ** gradient stand. La théorie de base du ting ** est la même, mais la conception (parallélisme, etc.) et les performances (réglage des hyperparamètres pour éviter le surapprentissage, etc.) sont assez différentes et pas les mêmes. L'équipe de développement Spark [surveille également] ceux-ci (https://issues.apache.org/jira/browse/SPARK-8547) et xgboost4j-spark par la famille de têtes XGBoost. / xgboost / tree / master / jvm-packages) etc. sont également disponibles.

environnement

Cible

――Les personnes qui veulent d'abord essayer l'apprentissage automatique sans penser aux choses difficiles

Chose que tu veux faire

Il existe une liste de prix d'accessoires tels que:

"Combien coûte le ** prix du bracelet en argent ** dans la rangée du bas?"

Je voudrais prédire cette valeur par apprentissage automatique en utilisant ** Java ** et ** Apache Spark **.

Estimation dite ** de prix **.

id Matériau Forme Poids (g) Marque Concessionnaire Prix (yen)
0 Argent Bracelet 56 Marques d'outre-mer célèbres Grand magasin td> 40864
1 Or Bague 48 Marque nationale célèbre Magasin géré directement / td> 63055
2 Dia Boucles d'oreilles 37 Marques nationales célèbres Magasins gérés directement / td> 112159
3 Dia Collier 20 Marques étrangères célèbres Magasins gérés directement / td> 216053
4 Dia Collier 33 Marques outre-mer célèbres Grand magasin td> 219666
5 Argent Broche 55 Marques nationales célèbres Grands magasins td> 16482
6 Platine Broche 58 Marque super célèbre à l'étranger Magasin géré directement 377919
7 Or Earlings 49 Marques nationales célèbres Magasins gérés directement / td> 60484
8 Argent Collier 59 Pas de marque Boutique bon marché < / td> 6256
9 Or Bagues 13 Marques nationales célèbres Grands magasins td> 37514



x Argent Bracelet 56 Marque super célèbre outre-mer Magasin géré directement Combien ça coûte?

Utilisez Apache Spark sur votre PC local

Environnement d'exploitation

** Apache Spark est une opération autonome **

** Apache Spark ** est un ** framework de traitement distribué ** qui peut facilement gérer le Big Data avec ** Hadoop **, et démontre sa force dans un environnement distribué où plusieurs machines sont utilisées dans une configuration de cluster. Cependant, le fonctionnement autonome de sur un PC local est simple </ font>.

Cette fois, nous exécuterons ** Apache Spark ** de manière autonome et utiliserons une fonction d'apprentissage automatique appelée ** spark.ml **.

OS Tant que le système d'exploitation inclut ** Java runtime **, il peut s'agir de Windows [^ 2], Linux ou Mac.

Le langage de développement est Java

** Apache Spark ** lui-même est écrit en Scala et possède des API qui peuvent être utilisées à partir de Scala, Java, Python et R.

Cet article utilise ** Java **.

Définir la dépendance de la bibliothèque

Configurez des bibliothèques dépendantes pour intégrer ** Apache Spark ** dans votre application Java.

Préparez simplement POM.xml (ou build.gradle) et ajoutez les bibliothèques associées à ** Apache Spark ** aux dépendances comme indiqué ci-dessous. ** Jackson ** sera également ajouté car il sera utilisé dans ** Apache Spark **.

POM.xml(Extrait)


<dependency>
	<groupId>org.apache.spark</groupId>
	<artifactId>spark-core_2.12</artifactId>
	<version>2.4.3</version>
</dependency>
<dependency>
	<groupId>org.apache.spark</groupId>
	<artifactId>spark-mllib_2.12</artifactId>
	<version>2.4.3</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.module</groupId>
	<artifactId>jackson-module-scala_2.12</artifactId>
	<version>2.9.9</version>
</dependency>

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.9</version>
</dependency>

Préparez le jeu de données

Ensuite, préparons l'ensemble de données à utiliser pour l'entraînement.

Le fichier se trouve ici (https://raw.githubusercontent.com/riversun/spark-gradient-boosting-tree-regression-example/master/dataset/gem_price_ja.csv).

Cette fois, je voudrais prédire le prix des accessoires tels que les colliers et les bagues fabriqués à partir de matières premières telles que le diamant et le platine par apprentissage automatique.

Les données au format CSV suivantes sont utilisées pour l'apprentissage automatique.

gem_price_ja.csv


id,material,shape,weight,brand,shop,price
0,argent,bracelet,56,Marques d'outre-mer célèbres,Grand magasin,40864
1,or,bague,48,Marque nationale célèbre,Magasin géré directement,63055
2,Dia,Des boucles d'oreilles,37,Marque nationale célèbre,Magasin géré directement,112159
3,Dia,Collier,20,Marques d'outre-mer célèbres,Magasin géré directement,216053
4,Dia,Collier,33,Marques d'outre-mer célèbres,Grand magasin,219666
5,argent,broche,55,Marque nationale célèbre,Grand magasin,16482
6,platine,broche,58,Marque super célèbre à l'étranger,Magasin géré directement,377919
7,or,Des boucles d'oreilles,49,Marque nationale célèbre,Magasin géré directement,60484
8,argent,Collier,59,Sans marque,Boutique pas chère,6256
・ ・ ・ ・

Je mets ces données au format CSV ici, mais ** id , Matière, forme, poids, marque, boutique, prix **, dans cet ordre, il y a ** 500 caisses au total ** ..

En d'autres termes, il existe ** 6 types de variables ** (6 types de ** matière, forme, poids, marque, boutique, prix ** hors id), soit ** 500 enregistrements **.

Essayez de lire des données avec Spark

Créez un répertoire appelé ** dataset ** directement sous le répertoire de travail et placez-y les données d'apprentissage ** gem_price_ja.csv **.

Le code qui lit ce fichier ** CSV ** et permet à Spark de le gérer est le suivant.


import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

public class GBTRegressionStep1 {

  public static void main(String[] args) {

    SparkSession spark = SparkSession
        .builder()
        .appName("GradientBoostingTreeGegression")
        .master("local[*]")// (1)
        .getOrCreate();

    spark.sparkContext().setLogLevel("OFF");// (2)

    Dataset<Row> dataset = spark
        .read()
        .format("csv")// (3)
        .option("header", "true")// (4)
        .option("inferSchema", "true")// (5)
        .load("dataset/gem_price_ja.csv");// (6)

    dataset.show();// (7)

    dataset.printSchema();// (8)

  }

}

Commentaire de code

** (1) ** .master ("local [ \ * </ span>]") </ b> </ i> ・ ・ ・ Exécutez Spark en mode local. " \ * </ span>" </ b> alloue des threads de travail pour le nombre de cœurs logiques du processeur. Si ***. Master ("local") ***, le nombre de threads de travail est fixé à ** 1 **. Si ***. Master ("local [2]") ***, le nombre de threads de travail sera ** 2 **.

** (2) ** ・ ・ ・ Désactivez la journalisation.

Ou pour le définir directement dans ** log4j **, procédez comme suit.

org.apache.log4j.Logger.getLogger("org").setLevel(org.apache.log4j.Level.ERROR);
org.apache.log4j.Logger.getLogger("akka").setLevel(org.apache.log4j.Level.ERROR);

** (3) ** ***. Format ("csv") *** ・ ・ ・ Lire le fichier de données au format CSV

** (4) ** ***. Option ("header", "true") *** ・ ・ ・ Si cette option est définie sur true, la première ligne du fichier CSV sera utilisée comme nom de colonne. Comme le SGBDR, Spark traite les données utilisées pour l'entraînement comme des données tabulaires. Lors de la préparation des données d'entraînement au format CSV, cela est pratique car la définition de la première ligne peut être mappée au nom de la colonne comme indiqué ci-dessous.

Première ligne du fichier CSV


id,material,shape,weight,brand,shop,price

** (5) ** ***. Option ("inferSchema", "true") *** ・ ・ ・ Estimer le schéma des données d'entrée Si ce paramètre est défini sur true, Spark estime et définit automatiquement le ** type ** de chaque donnée lors de la lecture d'un fichier CSV. C'est pratique. Par exemple, la ligne suivante est simple, donc le ** type ** de chaque donnée est estimé comme ** entier, chaîne, chaîne, entier, chaîne, chaîne, entier **. Si vous faites une erreur, vous pouvez définir le schéma exactement vous-même.

** (6) ** ***. Load ("dataset / gem_price_ja.csv"); *** ・ ・ ・ Lire le fichier de données

InferSchema peut gérer des données aussi simples


0,argent,bracelet,56,Marques d'outre-mer célèbres,Grand magasin,40864

** (7) ** *** dataset.show (); *** ・ ・ ・ Afficher le jeu de données lu

Lorsque cela est fait, cela ressemble à ceci:

+---+--------+------------+------+------------------+------------+------+
| id|material|       shape|weight|             brand|        shop| price|
+---+--------+------------+------+------------------+------------+------+
|  0|argent|bracelet|    56|Marques d'outre-mer célèbres|Grand magasin| 40864|
|  1|or|bague|    48|Marque nationale célèbre|Magasin géré directement| 63055|
|  2|Dia|Des boucles d'oreilles|    37|Marque nationale célèbre|Magasin géré directement|112159|
|  3|Dia|Collier|    20|Marques d'outre-mer célèbres|Magasin géré directement|216053|
|  4|Dia|Collier|    33|Marques d'outre-mer célèbres|Grand magasin|219666|
|  5|argent|broche|    55|Marque nationale célèbre|Grand magasin| 16482|
|  6|platine|broche|    58|Marque super célèbre à l'étranger|Magasin géré directement|377919|
|  7|or|Des boucles d'oreilles|    49|Marque nationale célèbre|Magasin géré directement| 60484|
|  8|argent|Collier|    59|Sans marque|Boutique pas chère|  6256|
|  9|or|bague|    13|Marque nationale célèbre|Grand magasin| 37514|
| 10|platine|Collier|    23|Marque nationale célèbre|Boutique pas chère| 48454|
| 11|Dia|Des boucles d'oreilles|    28|Marques d'outre-mer célèbres|Magasin géré directement|233614|
| 12|argent|Collier|    54|Marque nationale célèbre|Boutique pas chère| 12235|
| 13|platine|broche|    28|Sans marque|Grand magasin| 34285|
| 14|argent|Collier|    49|Sans marque|Boutique pas chère|  5970|
| 15|platine|bracelet|    40|Marque nationale célèbre|Grand magasin| 82960|
| 16|argent|Collier|    21|Marques d'outre-mer célèbres|Grand magasin| 28852|
| 17|or|bague|    11|Marque nationale célèbre|Grand magasin| 34980|
| 18|platine|bracelet|    44|Marque super célèbre à l'étranger|Grand magasin|340849|
| 19|argent|bague|    11|Marque super célèbre à l'étranger|Magasin géré directement| 47053|
+---+--------+------------+------+------------------+------------+------+
only showing top 20 rows

** (8) ** *** dataset.printSchema (); *** ・ ・ ・ Afficher le schéma

J'ai fait ***. Option ("inferSchema", "true") *** plus tôt, mais Spark a estimé le type correctement comme indiqué ci-dessous.

root
 |-- id: integer (nullable = true)
 |-- material: string (nullable = true)
 |-- shape: string (nullable = true)
 |-- weight: integer (nullable = true)
 |-- brand: string (nullable = true)
 |-- shop: string (nullable = true)
 |-- price: integer (nullable = true)

** Passez à Next "# 2 Data Preprocessing (Handling of Category Variables)" **

[^ 2]: Si vous obtenez le message d'erreur suivant lors de l'exécution de Spark dans un environnement Windows, téléchargez ** winutils.exe ** et placez-le dans un répertoire approprié. Expliqué dans le supplément à la fin de la phrase

Remarque: lors de l'exécution d'Apache Spark sous Windows

Si vous obtenez le message d'erreur suivant lors de l'exécution de Spark dans un environnement Windows, téléchargez ** winutils.exe ** et placez-le dans un répertoire approprié.

Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

winutils.exe est un utilitaire utilisé par Hadoop pour émuler des commandes Unix sous Windows.

Téléchargez-le sur http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe, par exemple sous ** c: / Temp / ** ** c: / Temp / Placez le répertoire pour qu'il devienne winutil / bin / winutil.exe **.

Ensuite, définissez comme suit au début du code.

System.setProperty("hadoop.home.dir", "c:\\Temp\\winutil\\");

Recommended Posts