[PYTHON] <Cours> Machine learning Chapitre 1: Modèle de régression linéaire

Apprentissage automatique

Lien vers la table des matières

table des matières Chapitre 1: Modèle de régression linéaire [Chapitre 2: Modèle de régression non linéaire] (https://qiita.com/matsukura04583/items/baa3f2269537036abc57) [Chapitre 3: Modèle de régression logistique] (https://qiita.com/matsukura04583/items/0fb73183e4a7a6f06aa5) [Chapitre 4: Analyse des composants principaux] (https://qiita.com/matsukura04583/items/b3b5d2d22189afc9c81c) [Chapitre 5: Algorithme 1 (méthode de voisinage k (kNN))] (https://qiita.com/matsukura04583/items/543719b44159322221ed) [Chapitre 6: Algorithme 2 (k-means)] (https://qiita.com/matsukura04583/items/050c98c7bb1c9e91be71) [Chapitre 7: Support Vector Machine] (https://qiita.com/matsukura04583/items/6b718642bcbf97ae2ca8)

introduction

Comprendre et mettre en œuvre les méthodes de base de l'apprentissage automatique

Flux de modélisation d'apprentissage automatique

1.Problème de réglage->2.Sélection des données->3.Prétraitement des données->4.Sélection du modèle d'apprentissage automatique
->5.Apprentissage de modèle(Estimation des paramètres)->6.Évaluation du modèle

Classification de l'apprentissage automatique et des modèles et fonctionnalités typiques

Classification d'apprentissage tâche Modèle d'apprentissage automatique Des paramètres
Problème deviner
modèle
Sélection / évaluation
Apprendre avec un enseignant Prévoir Régression linéaire / régression non linéaire Méthode du carré minimum / maximisation de la vraisemblance Méthode d'exclusion / méthode de vérification d'intersection
Comme ci-dessus Classification Retour logistique Maximiser la probabilité(Méthode la plus probable) Comme ci-dessus
Comme ci-dessus Comme ci-dessus Le plus proche / K-algorithme Le plus proche / K-algorithme Comme ci-dessus
Comme ci-dessus Comme ci-dessus Machine de vecteur de soutien Maximisation de la marge Comme ci-dessus
Apprendre sans professeur Clustering K-signifie algorithme K-signifie algorithme- Aucun
Comme ci-dessus Réduction de dimension Analyse des composants principaux Maximiser la distribution Aucun

Chapitre 1: Modèle de régression linéaire

Qu'est-ce qu'un problème de régression?

Données traitées par régression

Modèle de régression linéaire

article La description
Classification d'apprentissage Apprendre avec un enseignant
tâche Prévoir
Modèle d'apprentissage automatique Régression linéaire~~Régression non linéaire~~
Des paramètres
Problème deviner
Méthode du carré minimum / maximisation de la vraisemblance
Sélection / évaluation du modèle Méthode Holdout
Méthode de vérification croisée
  • Un modèle qui produit une combinaison linéaire de paramètres d'entrée et de m dimensions
  • << Notes sur la notation habituelle >> Ajouter un chapeau (^) à la valeur prédite (signifiant différent des données de réponse correctes)
  • ** Données de l'enseignant </ font> **
  {(x_i,y_i):i=1,・ ・ ・,n}
  • ** paramètres </ font> **
 w=(w_1,w_2,・ ・ ・,w_m)^T \in R^m
  • ** Connexion linéaire </ font> ** (La valeur de prédiction est habituelle pour mettre un chapeau)
 \hat{y}=w^Tx+w_0 = \sum_{j=1}^{m} w_jx_j+w_0
  • (Thème) Estimation du coefficient de régression par la méthode la plus probable
  • Il est également possible d'estimer l'erreur en utilisant la maximisation de la fonction de vraisemblance, en supposant une variable de probabilité qui suit une distribution normale. Dans le cas de la régression +, la solution la plus probable est cohérente avec l'échelle des moindres carrés.

Un modèle de régression linéaire est un modèle qui prédit la valeur de la variable objective à partir de la valeur de la variable explicative à l'aide de l'équation de régression suivante.

En particulier, une variable explicative est appelée «analyse de régression unique» et deux variables explicatives ou plus sont appelées «analyse de régression multiple». RNR1.jpg

(Pratique 1) Modèle de régression linéaire utilisant scikit-learn-Boston Hausing Data-

Choses à faire
  • Paramètres
  • Analyser l'ensemble de données sur le logement de Boston avec un modèle linéaire
  • Résultats d'évaluation appropriés requis
  • L'entreprise est endommagée si elle est trop chère ou trop bon marché
  • Défi
  • Combien coûte une propriété avec 4 chambres et un taux de criminalité de 0,3?
  1. Importez les modules et les données requis
#depuis le nom du module importer le nom de la classe (ou le nom de la fonction ou le nom de la variable)

from sklearn.datasets import load_boston
from pandas import DataFrame
import numpy as np

#Données de Boston"boston"Importer dans une instance appelée
boston = load_boston()

#Vérifiez les données importées(data / target / feature_names / DESCR)
print(boston)

Description des colonnes typiques スクリーンショット 2019-12-11 14.46.40.png

Afficher le contenu de boston

résultat


{'data': array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,
        4.9800e+00],
       [2.7310e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9690e+02,
        9.1400e+00],
       [2.7290e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9283e+02,
        4.0300e+00],
       ...,
       [6.0760e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,
        5.6400e+00],
       [1.0959e-01, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9345e+02,
        6.4800e+00],
       [4.7410e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,
        7.8800e+00]]), 'target': array([24. , 21.6, 34.7, 33.4, 36.2, 28.7, 22.9, 27.1, 16.5, 18.9, 15. ,
       18.9, 21.7, 20.4, 18.2, 19.9, 23.1, 17.5, 20.2, 18.2, 13.6, 19.6,
       15.2, 14.5, 15.6, 13.9, 16.6, 14.8, 18.4, 21. , 12.7, 14.5, 13.2,
       13.1, 13.5, 18.9, 20. , 21. , 24.7, 30.8, 34.9, 26.6, 25.3, 24.7,
       21.2, 19.3, 20. , 16.6, 14.4, 19.4, 19.7, 20.5, 25. , 23.4, 18.9,
       35.4, 24.7, 31.6, 23.3, 19.6, 18.7, 16. , 22.2, 25. , 33. , 23.5,
       19.4, 22. , 17.4, 20.9, 24.2, 21.7, 22.8, 23.4, 24.1, 21.4, 20. ,
       20.8, 21.2, 20.3, 28. , 23.9, 24.8, 22.9, 23.9, 26.6, 22.5, 22.2,
       23.6, 28.7, 22.6, 22. , 22.9, 25. , 20.6, 28.4, 21.4, 38.7, 43.8,
       33.2, 27.5, 26.5, 18.6, 19.3, 20.1, 19.5, 19.5, 20.4, 19.8, 19.4,
       21.7, 22.8, 18.8, 18.7, 18.5, 18.3, 21.2, 19.2, 20.4, 19.3, 22. ,
       20.3, 20.5, 17.3, 18.8, 21.4, 15.7, 16.2, 18. , 14.3, 19.2, 19.6,
       23. , 18.4, 15.6, 18.1, 17.4, 17.1, 13.3, 17.8, 14. , 14.4, 13.4,
       15.6, 11.8, 13.8, 15.6, 14.6, 17.8, 15.4, 21.5, 19.6, 15.3, 19.4,
       17. , 15.6, 13.1, 41.3, 24.3, 23.3, 27. , 50. , 50. , 50. , 22.7,
       25. , 50. , 23.8, 23.8, 22.3, 17.4, 19.1, 23.1, 23.6, 22.6, 29.4,
       23.2, 24.6, 29.9, 37.2, 39.8, 36.2, 37.9, 32.5, 26.4, 29.6, 50. ,
       32. , 29.8, 34.9, 37. , 30.5, 36.4, 31.1, 29.1, 50. , 33.3, 30.3,
       34.6, 34.9, 32.9, 24.1, 42.3, 48.5, 50. , 22.6, 24.4, 22.5, 24.4,
       20. , 21.7, 19.3, 22.4, 28.1, 23.7, 25. , 23.3, 28.7, 21.5, 23. ,
       26.7, 21.7, 27.5, 30.1, 44.8, 50. , 37.6, 31.6, 46.7, 31.5, 24.3,
       31.7, 41.7, 48.3, 29. , 24. , 25.1, 31.5, 23.7, 23.3, 22. , 20.1,
       22.2, 23.7, 17.6, 18.5, 24.3, 20.5, 24.5, 26.2, 24.4, 24.8, 29.6,
       42.8, 21.9, 20.9, 44. , 50. , 36. , 30.1, 33.8, 43.1, 48.8, 31. ,
       36.5, 22.8, 30.7, 50. , 43.5, 20.7, 21.1, 25.2, 24.4, 35.2, 32.4,
       32. , 33.2, 33.1, 29.1, 35.1, 45.4, 35.4, 46. , 50. , 32.2, 22. ,
       20.1, 23.2, 22.3, 24.8, 28.5, 37.3, 27.9, 23.9, 21.7, 28.6, 27.1,
       20.3, 22.5, 29. , 24.8, 22. , 26.4, 33.1, 36.1, 28.4, 33.4, 28.2,
       22.8, 20.3, 16.1, 22.1, 19.4, 21.6, 23.8, 16.2, 17.8, 19.8, 23.1,
       21. , 23.8, 23.1, 20.4, 18.5, 25. , 24.6, 23. , 22.2, 19.3, 22.6,
       19.8, 17.1, 19.4, 22.2, 20.7, 21.1, 19.5, 18.5, 20.6, 19. , 18.7,
       32.7, 16.5, 23.9, 31.2, 17.5, 17.2, 23.1, 24.5, 26.6, 22.9, 24.1,
       18.6, 30.1, 18.2, 20.6, 17.8, 21.7, 22.7, 22.6, 25. , 19.9, 20.8,
       16.8, 21.9, 27.5, 21.9, 23.1, 50. , 50. , 50. , 50. , 50. , 13.8,
       13.8, 15. , 13.9, 13.3, 13.1, 10.2, 10.4, 10.9, 11.3, 12.3,  8.8,
        7.2, 10.5,  7.4, 10.2, 11.5, 15.1, 23.2,  9.7, 13.8, 12.7, 13.1,
       12.5,  8.5,  5. ,  6.3,  5.6,  7.2, 12.1,  8.3,  8.5,  5. , 11.9,
       27.9, 17.2, 27.5, 15. , 17.2, 17.9, 16.3,  7. ,  7.2,  7.5, 10.4,
        8.8,  8.4, 16.7, 14.2, 20.8, 13.4, 11.7,  8.3, 10.2, 10.9, 11. ,
        9.5, 14.5, 14.1, 16.1, 14.3, 11.7, 13.4,  9.6,  8.7,  8.4, 12.8,
       10.5, 17.1, 18.4, 15.4, 10.8, 11.8, 14.9, 12.6, 14.1, 13. , 13.4,
       15.2, 16.1, 17.8, 14.9, 14.1, 12.7, 13.5, 14.9, 20. , 16.4, 17.7,
       19.5, 20.2, 21.4, 19.9, 19. , 19.1, 19.1, 20.1, 19.9, 19.6, 23.2,
       29.8, 13.8, 13.3, 16.7, 12. , 14.6, 21.4, 23. , 23.7, 25. , 21.8,
       20.6, 21.2, 19.1, 20.6, 15.2,  7. ,  8.1, 13.6, 20.1, 21.8, 24.5,
       23.1, 19.7, 18.3, 21.2, 17.5, 16.8, 22.4, 20.6, 23.9, 22. , 11.9]), 'feature_names': array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
       'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7'), 'DESCR': ".. _boston_dataset:\n\nBoston house prices dataset\n---------------------------\n\n**Data Set Characteristics:**  \n\n    :Number of Instances: 506 \n\n    :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.\n\n    :Attribute Information (in order):\n        - CRIM     per capita crime rate by town\n        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.\n        - INDUS    proportion of non-retail business acres per town\n        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n        - NOX      nitric oxides concentration (parts per 10 million)\n        - RM       average number of rooms per dwelling\n        - AGE      proportion of owner-occupied units built prior to 1940\n        - DIS      weighted distances to five Boston employment centres\n        - RAD      index of accessibility to radial highways\n        - TAX      full-value property-tax rate per $10,000\n        - PTRATIO  pupil-teacher ratio by town\n        - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\n        - LSTAT    % lower status of the population\n        - MEDV     Median value of owner-occupied homes in $1000's\n\n    :Missing Attribute Values: None\n\n    :Creator: Harrison, D. and Rubinfeld, D.L.\n\nThis is a copy of UCI ML housing dataset.\nhttps://archive.ics.uci.edu/ml/machine-learning-databases/housing/\n\n\nThis dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\n\nThe Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\nprices and the demand for clean air', J. Environ. Economics & Management,\nvol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics\n...', Wiley, 1980.   N.B. Various transformations are used in the table on\npages 244-261 of the latter.\n\nThe Boston house-price data has been used in many machine learning papers that address regression\nproblems.   \n     \n.. topic:: References\n\n   - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\n   - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n", 'filename': '/usr/local/lib/python3.6/dist-packages/sklearn/datasets/data/boston_house_prices.csv'}
#Vérifiez le contenu de la variable DESCR
print(boston['DESCR'])

résultat


.. _boston_dataset:

Boston house prices dataset
---------------------------

**Data Set Characteristics:**  

    :Number of Instances: 506 

    :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.

    :Attribute Information (in order):
        - CRIM     per capita crime rate by town
        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.
        - INDUS    proportion of non-retail business acres per town
        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
        - NOX      nitric oxides concentration (parts per 10 million)
        - RM       average number of rooms per dwelling
        - AGE      proportion of owner-occupied units built prior to 1940
        - DIS      weighted distances to five Boston employment centres
        - RAD      index of accessibility to radial highways
        - TAX      full-value property-tax rate per $10,000
        - PTRATIO  pupil-teacher ratio by town
        - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
        - LSTAT    % lower status of the population
        - MEDV     Median value of owner-occupied homes in $1000's

    :Missing Attribute Values: None

    :Creator: Harrison, D. and Rubinfeld, D.L.

This is a copy of UCI ML housing dataset.
https://archive.ics.uci.edu/ml/machine-learning-databases/housing/


This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.

The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic
prices and the demand for clean air', J. Environ. Economics & Management,
vol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics
...', Wiley, 1980.   N.B. Various transformations are used in the table on
pages 244-261 of the latter.

The Boston house-price data has been used in many machine learning papers that address regression
problems.   
     
.. topic:: References

   - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.
   - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.
   

#feature_Vérifiez le contenu de la variable names
#Nom de colonne
print(boston['feature_names'])

résultat


['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']
#variable de données(Variable explicative)Vérifiez le contenu
print(boston['data'])

résultat


[[6.3200e-03 1.8000e+01 2.3100e+00 ... 1.5300e+01 3.9690e+02 4.9800e+00]
 [2.7310e-02 0.0000e+00 7.0700e+00 ... 1.7800e+01 3.9690e+02 9.1400e+00]
 [2.7290e-02 0.0000e+00 7.0700e+00 ... 1.7800e+01 3.9283e+02 4.0300e+00]
 ...
 [6.0760e-02 0.0000e+00 1.1930e+01 ... 2.1000e+01 3.9690e+02 5.6400e+00]
 [1.0959e-01 0.0000e+00 1.1930e+01 ... 2.1000e+01 3.9345e+02 6.4800e+00]
 [4.7410e-02 0.0000e+00 1.1930e+01 ... 2.1000e+01 3.9690e+02 7.8800e+00]]
#variable cible(Variable objective)Vérifiez le contenu
print(boston['target'])

résultat


[24.  21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 15.  18.9 21.7 20.4
 18.2 19.9 23.1 17.5 20.2 18.2 13.6 19.6 15.2 14.5 15.6 13.9 16.6 14.8
 18.4 21.  12.7 14.5 13.2 13.1 13.5 18.9 20.  21.  24.7 30.8 34.9 26.6
 25.3 24.7 21.2 19.3 20.  16.6 14.4 19.4 19.7 20.5 25.  23.4 18.9 35.4
 24.7 31.6 23.3 19.6 18.7 16.  22.2 25.  33.  23.5 19.4 22.  17.4 20.9
 24.2 21.7 22.8 23.4 24.1 21.4 20.  20.8 21.2 20.3 28.  23.9 24.8 22.9
 23.9 26.6 22.5 22.2 23.6 28.7 22.6 22.  22.9 25.  20.6 28.4 21.4 38.7
 43.8 33.2 27.5 26.5 18.6 19.3 20.1 19.5 19.5 20.4 19.8 19.4 21.7 22.8
 18.8 18.7 18.5 18.3 21.2 19.2 20.4 19.3 22.  20.3 20.5 17.3 18.8 21.4
 15.7 16.2 18.  14.3 19.2 19.6 23.  18.4 15.6 18.1 17.4 17.1 13.3 17.8
 14.  14.4 13.4 15.6 11.8 13.8 15.6 14.6 17.8 15.4 21.5 19.6 15.3 19.4
 17.  15.6 13.1 41.3 24.3 23.3 27.  50.  50.  50.  22.7 25.  50.  23.8
 23.8 22.3 17.4 19.1 23.1 23.6 22.6 29.4 23.2 24.6 29.9 37.2 39.8 36.2
 37.9 32.5 26.4 29.6 50.  32.  29.8 34.9 37.  30.5 36.4 31.1 29.1 50.
 33.3 30.3 34.6 34.9 32.9 24.1 42.3 48.5 50.  22.6 24.4 22.5 24.4 20.
 21.7 19.3 22.4 28.1 23.7 25.  23.3 28.7 21.5 23.  26.7 21.7 27.5 30.1
 44.8 50.  37.6 31.6 46.7 31.5 24.3 31.7 41.7 48.3 29.  24.  25.1 31.5
 23.7 23.3 22.  20.1 22.2 23.7 17.6 18.5 24.3 20.5 24.5 26.2 24.4 24.8
 29.6 42.8 21.9 20.9 44.  50.  36.  30.1 33.8 43.1 48.8 31.  36.5 22.8
 30.7 50.  43.5 20.7 21.1 25.2 24.4 35.2 32.4 32.  33.2 33.1 29.1 35.1
 45.4 35.4 46.  50.  32.2 22.  20.1 23.2 22.3 24.8 28.5 37.3 27.9 23.9
 21.7 28.6 27.1 20.3 22.5 29.  24.8 22.  26.4 33.1 36.1 28.4 33.4 28.2
 22.8 20.3 16.1 22.1 19.4 21.6 23.8 16.2 17.8 19.8 23.1 21.  23.8 23.1
 20.4 18.5 25.  24.6 23.  22.2 19.3 22.6 19.8 17.1 19.4 22.2 20.7 21.1
 19.5 18.5 20.6 19.  18.7 32.7 16.5 23.9 31.2 17.5 17.2 23.1 24.5 26.6
 22.9 24.1 18.6 30.1 18.2 20.6 17.8 21.7 22.7 22.6 25.  19.9 20.8 16.8
 21.9 27.5 21.9 23.1 50.  50.  50.  50.  50.  13.8 13.8 15.  13.9 13.3
 13.1 10.2 10.4 10.9 11.3 12.3  8.8  7.2 10.5  7.4 10.2 11.5 15.1 23.2
  9.7 13.8 12.7 13.1 12.5  8.5  5.   6.3  5.6  7.2 12.1  8.3  8.5  5.
 11.9 27.9 17.2 27.5 15.  17.2 17.9 16.3  7.   7.2  7.5 10.4  8.8  8.4
 16.7 14.2 20.8 13.4 11.7  8.3 10.2 10.9 11.   9.5 14.5 14.1 16.1 14.3
 11.7 13.4  9.6  8.7  8.4 12.8 10.5 17.1 18.4 15.4 10.8 11.8 14.9 12.6
 14.1 13.  13.4 15.2 16.1 17.8 14.9 14.1 12.7 13.5 14.9 20.  16.4 17.7
 19.5 20.2 21.4 19.9 19.  19.1 19.1 20.1 19.9 19.6 23.2 29.8 13.8 13.3
 16.7 12.  14.6 21.4 23.  23.7 25.  21.8 20.6 21.2 19.1 20.6 15.2  7.
  8.1 13.6 20.1 21.8 24.5 23.1 19.7 18.3 21.2 17.5 16.8 22.4 20.6 23.9
 22.  11.9]

Créer un bloc de données

#Convertir les variables explicatives en DataFrame
df = DataFrame(data=boston.data, columns = boston.feature_names)
#Ajouter une variable d'objectif à DataFrame
df['PRICE'] = np.array(boston.target)
#Afficher les 5 premières lignes
df.head(5)
スクリーンショット 2019-12-11 11.52.12.png

Analyse de régression simple linéaire

Tout d'abord, faisons une analyse de régression simple qui prédit le prix à partir du nombre de chambres. Récupérez les données de l'emplacement avec le numéro de chambre (RM).

#Afficher les données en spécifiant des colonnes
df[['RM']].head()
スクリーンショット 2019-12-11 12.00.19.png

(Référence: Check df.head): Fonctionnement des données de DataFrame des pandas

#Variable explicative
data = df.loc[:, ['RM']].values
#Afficher la liste des données(1-5)
data[0:5]

résultat


array([[6.575],
       [6.421],
       [7.185],
       [6.998],
       [7.147]])

(Référence) Obtenir / modifier la valeur de n'importe quelle position avec les pandas à, iat, loc, iloc

#Variable objective
target = df.loc[:, 'PRICE'].values
target[0:5]
  • Apportez tous les PRIX à la cible en découpant

résultat


array([24. , 21.6, 34.7, 33.4, 36.2])

(Référence) Classe LinearRegression de sklearn

##Importer LinearRegression depuis le module sklearn
from sklearn.linear_model import LinearRegression

#Création d'objets
model = LinearRegression()
#model.get_params()
#model = LinearRegression(fit_intercept = True, normalize = False, copy_X = True,  n_jobs = 1)

#Estimation des paramètres avec fonction d'ajustement
model.fit(data, target)

Création d'une instance à partir d'une classe (méthode sklearn) L'instance a une méthode.

  • La fonction fit est une méthode d'entraînement. fit(x, y) Effectuez un ajustement de modèle de régression linéaire. Début de la formation. x est la donnée cible et y est la donnée de réponse correcte * Fondé sur un apprentissage supervisé. Si vous le passez, il effectuera une régression linéaire dans les coulisses.

résultat


LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)

Vous pouvez maintenant voir les prévisions. Prédire à l'aide du modèle créé par prédire (x).

#Prévoir
model.predict([[1]])

résultat


array([-25.5685118])

[(Référence): Comment utiliser la classe sklearn.linear_model.LinearRegression](https://pythondatascience.plavox.info/scikit-learn/%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5% B8% B0)

Analyse de régression multiple (2 variables)

df[['CRIM', 'RM']].head()
スクリーンショット 2019-12-11 14.03.19.png
#Variable explicative
data2 = df.loc[:, ['CRIM', 'RM']].values
#Variable objective
target2 = df.loc[:, 'PRICE'].values
#Création d'objets
model2 = LinearRegression()
#Estimation des paramètres avec fonction d'ajustement
model2.fit(data2, target2)

résultat


LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
model2.predict([[0.3, 4]])

résultat


array([4.24007956])

Combien coûte une propriété avec 4 chambres et un taux de criminalité de 0,3? La réponse est 4.24.

Vérifiez le coefficient de régression et la valeur de section

Sortie du coefficient de régression et de la section de régression simple La fonction d'ajustement va trouver le point qui minimise l'assistance quadratique moyenne. Il est important de comprendre cela et d'utiliser la fonction. La commande pour comprendre la valeur prédite (w hat) de w est la suivante.


print('Coefficient de régression estimé: %.3f,Section estimée: %.3f' % (model.coef_, model.intercept_))

résultat


Coefficient de régression estimé: 9.236,Section estimée: -35.481

Plus le taux de criminalité est élevé, moins il est bon marché, et plus le nombre de chambres est élevé, plus il est élevé.

#Sortie du coefficient de régression et de la section de régression multiple
print(model.coef_)
print(model.intercept_)

résultat


[9.23560156]
-35.48090633823544

Validation du modèle

  1. Coefficient de décision
#Coefficient de décision
print('Coefficient de détermination de régression simple: %.3f,Coefficient de détermination de la régression multiple: %.3f' % (model.score(data,target), model2.score(data2,target2)))

résultat


Coefficient de détermination de régression simple: 0.483,Coefficient de détermination de la régression multiple: 0.542
# train_test_Importer une division
from sklearn.model_selection import train_test_split
# 70%Pour apprendre, 30%Est divisé en données de vérification
X_train, X_test, y_train, y_test = train_test_split(data, target, 
test_size = 0.3, random_state = 666)
#Estimation des paramètres avec les données d'entraînement
model.fit(X_train, y_train)
#Prédiction à partir du modèle créé (à l'aide de modèles de formation et de vérification)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
#Importer matplotlib
import matplotlib.pyplot as plt
#Si vous utilisez Jupyter, écrivez la magie suivante et un chiffre sera affiché sur le cahier
%matplotlib inline
#Tracer les résidus pour l'apprentissage et la vérification respectivement
plt.scatter(y_train_pred, y_train_pred - y_train, c = 'blue', marker = 'o', label = 'Train Data')
plt.scatter(y_test_pred, y_test_pred - y_test, c = 'lightgreen', marker = 's', label = 'Test Data')
plt.xlabel('Predicted Values')
plt.ylabel('Residuals')
#Légende affichée en haut à gauche
plt.legend(loc = 'upper left')
# y =Tracez une ligne droite vers 0
plt.hlines(y = 0, xmin = -10, xmax = 50, lw = 2, color = 'red')
plt.xlim([10, 50])
plt.show()

スクリーンショット 2019-12-11 19.55.53.png

Considération

  • L'utilisation de sklearn rend le programme très simple. Vous devriez essayer d'autres modèles d'apprentissage.
  • Dans ce cas, le coefficient de détermination de la régression simple: 0,483 et le coefficient de détermination de la régression multiple: 0,542, et la régression multiple est plus précise.

Liens connexes

table des matières Chapitre 1: Modèle de régression linéaire [Chapitre 2: Modèle de régression non linéaire] (https://qiita.com/matsukura04583/items/baa3f2269537036abc57) [Chapitre 3: Modèle de régression logistique] (https://qiita.com/matsukura04583/items/0fb73183e4a7a6f06aa5) [Chapitre 4: Analyse des composants principaux] (https://qiita.com/matsukura04583/items/b3b5d2d22189afc9c81c) [Chapitre 5: Algorithme 1 (méthode de voisinage k (kNN))] (https://qiita.com/matsukura04583/items/543719b44159322221ed) [Chapitre 6: Algorithme 2 (k-means)] (https://qiita.com/matsukura04583/items/050c98c7bb1c9e91be71) [Chapitre 7: Support Vector Machine] (https://qiita.com/matsukura04583/items/6b718642bcbf97ae2ca8)

Recommended Posts