Home | José Ramón López | AutoSys | Webs de interés | perl | kubernetes | azure | machine learning
Simple linear regression es una ecuacion de primer grado. Para calcular los mejores coeficientes usa el metodo Ordinary least squares
y=b + cx - y variable dependiente - b constant y-intercept - c slope coeficient - x variable independiente
import numpy as np # trabajo con arrays import matplotlib.pyplot as plt # para hacer gráficos import pandas as pd # importar los datasets, la matriz de características y el vector de variable dependiente
dataset = pd.read_csv('Data.csv') # cargo el dataset print(dataset) YearsExperience Salary 0 1.1 39343.0 1 1.3 46205.0 2 1.5 37731.0 3 2.0 43525.0 4 2.2 39891.0 5 2.9 56642.0 6 3.0 60150.0 7 3.2 54445.0 8 3.2 64445.0 9 3.7 57189.0 10 3.9 63218.0 11 4.0 55794.0 12 4.0 56957.0 13 4.1 57081.0 14 4.5 61111.0 15 4.9 67938.0 16 5.1 66029.0 17 5.3 83088.0 18 5.9 81363.0 19 6.0 93940.0 20 6.8 91738.0 21 7.1 98273.0 22 7.9 101302.0 23 8.2 113812.0 24 8.7 109431.0 25 9.0 105582.0 26 9.5 116969.0 27 9.6 112635.0 28 10.3 122391.0 29 10.5 121872.0 X = dataset.iloc[:, :-1].values # pongo en el panda dataset X todas las filas de todas las columnas menos la última porque en ella está la variable dependiente y = dataset.iloc[:, -1].values # pongo en el panda dataset y todas las filas de la ultima columna print(X) [[ 1.1] [ 1.3] [ 1.5] [ 2. ] [ 2.2] [ 2.9] [ 3. ] [ 3.2] [ 3.2] [ 3.7] [ 3.9] [ 4. ] [ 4. ] [ 4.1] [ 4.5] [ 4.9] [ 5.1] [ 5.3] [ 5.9] [ 6. ] [ 6.8] [ 7.1] [ 7.9] [ 8.2] [ 8.7] [ 9. ] [ 9.5] [ 9.6] [10.3] [10.5]] print(y) [ 39343. 46205. 37731. 43525. 39891. 56642. 60150. 54445. 64445. 57189. 63218. 55794. 56957. 57081. 61111. 67938. 66029. 83088. 81363. 93940. 91738. 98273. 101302. 113812. 109431. 105582. 116969.
Se suelen crear 4 datasets - X_train 66% para entrenar el modelo - Y_train las respuestas de X_train - X_test 33% para comprobar el modelo - Y_test las respuestas del modelo from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0) #0.33 dedico el 33% a test print(X_train) [ 2.9] [ 5.1] [ 3.2] [ 4.5] [ 8.2] [ 6.8] [ 1.3] [10.5] [ 3. ] [ 2.2] [ 5.9] [ 6. ] [ 3.7] [ 3.2] [ 9. ] [ 2. ] [ 1.1] [ 7.1] [ 4.9] [ 4. ]] print(X_test) [[ 1.5] [10.3] [ 4.1] [ 3.9] [ 9.5] [ 8.7] [ 9.6] [ 4. ] [ 5.3] [ 7.9]] print(y_train) [ 56642. 66029. 64445. 61111. 113812. 91738. 46205. 121872. 60150. 39891. 81363. 93940. 57189. 54445. 105582. 43525. 39343. 98273. 67938. 56957.] print(y_test) [ 37731. 122391. 57081. 63218. 116969. 109431. 112635. 55794. 83088. 101302.]
from sklearn.linear_model import LinearRegression # importo la clase LinearRegression de la libreria sklearn del modulo linear_model regressor = LinearRegression() # creo un objeto de la clase LinearRegression regressor.fit(X_train, y_train) # fit = entreno el modelo con los datasets de train
y_pred = regressor.predict(X_test) # obtengo los resultados de X_test
plt.scatter(X_train, y_train, color = 'red') # dibujo en puntos rojos los datos de training plt.plot(X_train, regressor.predict(X_train), color = 'blue') # dibujo en azul el modelo plt.title('Salary vs Experience (Training set)') plt.xlabel('Years of Experience') plt.ylabel('Salary') plt.show()
plt.scatter(X_test, y_test, color = 'red') # dibujo enrojo los datos de testeo plt.plot(X_train, regressor.predict(X_train), color = 'blue') # dibujo en azul el model,uso X_train porque el modelo es el mismo que para X_test plt.title('Salary vs Experience (Test set)') plt.xlabel('Years of Experience') plt.ylabel('Salary') plt.show()
print(regressor.predict([[12]])) # los 2 [[ es porque el modelo espera un array de 2 dimensiones [138967.5015615]
print(regressor.coef_) print(regressor.intercept_) [9345.94244312] 26816.192244031183 Así que el modelo queda Salario = egressor.coef_ x YearsOfExperenia + regressor.intercept_ Salario = 9345.94244312 x YearsOfExperenia + 26816.192244031183