La régression linéaire est l'un des algorithmes les plus connus. Elle est toujours enseigné au lycée. Il permet de résoudre des problèmes de régression de type linéaire.
Le knn est un algorithme d'apprentissage supervisé
La régression linéaire est un modèle de régression linéaire est un modèle de régression qui cherche à établir une relation linéaire entre une variable, dite expliquée, et une ou plusieurs variables, dites explicatives. Wikipédia : https://fr.m.wikipedia.org/wiki/R%C3%A9gression_lin%C3%A9aire
La régression linéaire repose sur l'hypothèse d'une relation linéaire entre la variable dépendante y et les prédicteurs X. La valeur de y serait donc une combinaison linéaire des prédicteurs.
La solution d'une régression est obtenue grâce à la méthode des moindres carrés ordinaires qui consiste à minimiser les erreurs de prédictions.
On appelle résidu (ou erreur) la différence entre la valeur prédite et la valeur réelle. On note epsilon = y - ŷ
https://scikit-learn.org/stable/modules/linear_model.html#ordinary-least-squares
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.neighbors import KNeighborsRegressor, KNeighborsClassifier
iris = pd.read_csv("data/iris.csv") iris.head()
plt.figure(figsize=(10, 8)) sns.scatterplot(x="petal_width", y="petal_length", hue="species", data=iris) plt.show()
from sklearn.neighbors import KNeighborsClassifier
# coding : utf-8 ''' Scikit-learn Challenge #01 : K Nearest Neighbors ''' # Packages import pickle from sklearn.datasets import load_iris from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score # Get data X, y = load_iris(return_X_y=True) # Design model clf = KNeighborsClassifier(n_neighbors=5) # Train model clf.fit(X, y) # Evaluate model y_pred = clf.predict(X) score = accuracy_score(y, y_pred) print('Accuracy score: ', round(score, 2)) # Inference output = clf.predict([[1.5, 0.24, 2.6, 0.1]])[0] print('Predcited class: ', output) # Save model with open('output/model.pkl', 'wb') as f: pickle.dump(obj=clf, file=f)
Dans le cadre d'une classification, on va classifier les points en fonction de leur espèce.
X = dt.petal_width.values.reshape(-1, 1) y = dt.petal_length.values
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, shuffle=True, test_size=.3)
knn = KNeighborsRegressor(n_neighbors=5)
knn.fit(X_train, y_train)
KNeighborsRegressor(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=None, n_neighbors=5, p=2, weights='uniform')
from sklearn.metrics import r2_score y_pred = knn.predict(X_test) score = r2_score(y_test, y_pred) score
0.9377572372679783
plt.scatter(y_test, y_pred) plt.plot(y_test, y_test, c="red")
[<matplotlib.lines.Line2D at 0x7ff07e363090>]
k_values = [2, 3, 4, 5, 6, 7, 8] train_scores = [] test_scores = [] for k in k_values: knn = KNeighborsRegressor(n_neighbors=k) knn.fit(X_train, y_train) train_scores.append(knn.score(X_train, y_train)) test_scores.append(knn.score(X_test, y_test)) plt.plot(k_values, train_scores) plt.plot(k_values, test_scores)
[<matplotlib.lines.Line2D at 0x7ff07e337e50>]
X = dt[["petal_width", "petal_length"]] species = dt["species"]
from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() y = encoder.fit_transform(species)
clf = KNeighborsClassifier(n_neighbors=5)
clf.fit(X_train, y_train)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=None, n_neighbors=5, p=2, weights='uniform')
from sklearn.metrics import accuracy_score y_pred = clf.predict(X_test) score = accuracy_score(y_test, y_pred) score
0.9333333333333333
k_values = [2, 3, 4, 5, 6, 7, 8] train_scores = [] test_scores = [] for k in k_values: knn = KNeighborsClassifier(n_neighbors=k) knn.fit(X_train, y_train) train_scores.append(knn.score(X_train, y_train)) test_scores.append(knn.score(X_test, y_test)) plt.plot(k_values, train_scores) plt.plot(k_values, test_scores)
[<matplotlib.lines.Line2D at 0x7ff07e2beb90>]
Dans le cadre d'une classification
clf.predict([[1.5, 5.0]]), clf.predict_proba([[1.5, 5.0]])
(array(['versicolor'], dtype=object), array([[0. , 0.8, 0.2]]))
sns.pairplot(dt, hue='species')
<seaborn.axisgrid.PairGrid at 0x7ff07d83c610>
Pour signaler un problème que vous avez rencontré durant l'exécution des cahiers, merci de créer une issue. Assurez-vous que vous avez les bonnes versions des packages*
issue