X_test = pca.transform(X_test) # este vector contiene el porcentaje de varianza explicada por cada uno de los "principal components" explained_variance = pca.explained_variance_ratio_ # en este caso, con los primeros dos principal components es suficiente para la clasificacion que queremos hacer # por lo tanto, esos pasaran a ser nuestras variables independientes # creando y entrenando el modelo from sklearn.linear_model import LogisticRegression classifier = LogisticRegression(random_state=0) classifier.fit(X_train, y_train) y_pred = classifier.predict(X_test) # confusion matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix( y_test, y_pred) # aproximadamente 97% de precision en el test set # grafica de la clasificacion (regiones de prediccion) # al ser un modelo de clasificacion lineal, el limite de prediccion es una linea recta from utils import plot_classification plot_classification(X_train, y_train, classifier, 'Logistic Regression with PCA (Training Set)', 'PC1', 'PC2') plot_classification(X_test, y_test, classifier, 'Logistic Regression with PCA (Test Set)', 'PC1', 'PC2')
''' Example of semi-boost implementation ''' import os # Set working directory to file directory os.chdir('/data/home/joliver/github/semi_boost/src') import sys import importlib import SemiBoost import utils import importlib importlib.reload(SemiBoost) importlib.reload(utils) utils.plot_classification(data_simulation='make_circles', ratio_unsampled=0.9) utils.plot_classification(data_simulation='make_moons', ratio_unsampled=0.9) utils.plot_classification(data_simulation='make_blobs', ratio_unsampled=0.9) utils.plot_classification(data_simulation='make_classification', ratio_unsampled=0.9) utils.plot_classification(data_simulation='make_gaussian_quantiles', ratio_unsampled=0.9) utils.mejora_semiboost(n_features=10, ratio_unsampled=0.50, n_samples=1000, data_simulation='make_gaussian_quantiles')
# creando y entrenando el modelo from sklearn.tree import DecisionTreeClassifier # Maxima profundidad del arbol limitada a 3 para evitar overfitting classifier = DecisionTreeClassifier(criterion='entropy', random_state=0, max_depth=3) classifier.fit(X_train, y_train) y_pred = classifier.predict(X_test) # confusion matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) # (0;0) predicciones de la clase 0 correctas # (1;0) predicciones de la clase 0 incorrectas (eran de la clase 1) # (0;1) predicciones de la clase 1 incorrectas (eran de la clase 0) # (1;1) predicciones de la clase 1 correctas # grafica de la clasificacion (regiones de prediccion) from utils import plot_classification plot_classification(X_train, y_train, classifier, 'Decision Tree Classification (Training Set)', 'Age', 'Estimated Salary') plot_classification(X_test, y_test, classifier, 'Decision Tree Classification (Test Set)', 'Age', 'Estimated Salary')
from sklearn.preprocessing import StandardScaler sc_X = StandardScaler() X_train = sc_X.fit_transform(X_train) # aca no hace falta el fit, porque ya se le hizo el fit a X antes X_test = sc_X.transform(X_test) # creando y entrenando el modelo from sklearn.linear_model import LogisticRegression classifier = LogisticRegression(random_state=0) classifier.fit(X_train, y_train) y_pred = classifier.predict(X_test) # confusion matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) # (0;0) predicciones de la clase 0 correctas # (1;0) predicciones de la clase 0 incorrectas (eran de la clase 1) # (0;1) predicciones de la clase 1 incorrectas (eran de la clase 0) # (1;1) predicciones de la clase 1 correctas # grafica de la clasificacion (regiones de prediccion) # al ser un modelo de clasificacion lineal, el limite de prediccion es una linea recta from utils import plot_classification plot_classification(X_train, y_train, classifier, 'Logistic Regression (Training Set)', 'Age', 'Estimated Salary') plot_classification(X_test, y_test, classifier, 'Logistic Regression (Test Set)', 'Age', 'Estimated Salary')
'kernel': ['linear'] }, { 'C': [1, 10, 100, 1000], 'kernel': ['rbf'], 'gamma': [0.5, 0.1, 0.01, 0.001] }] # scoring = metrica en funcion de la cual se elegira el mejor modelo # cv = cantidad de folds, ya que para el calculo de la metrica de scoring, grid search usa k-fold cross validation # n_jobs = nucleos del procesador a usar grid_search = GridSearchCV(estimator=classifier, param_grid=parameters, scoring='accuracy', cv=10, n_jobs=-1) grid_search = grid_search.fit(X_train, y_train) best_accuracy = grid_search.best_score_ best_parameters = grid_search.best_params_ # grafica de la clasificacion (regiones de prediccion) # al estar usando el "rbf" kernel (Gaussian) que es no lineal, el limite de prediccion no es una linea recta from utils import plot_classification plot_classification(X_train, y_train, classifier, 'SVM Gaussian Kernel (Training Set)', 'Age', 'Estimated Salary') plot_classification(X_test, y_test, classifier, 'SVM Gaussian Kernel (Test Set)', 'Age', 'Estimated Salary')
# aca no hace falta el fit, porque ya se le hizo el fit a X antes X_test = sc_X.transform(X_test) # creando y entrenando el modelo from sklearn.neighbors import KNeighborsClassifier classifier = KNeighborsClassifier(n_neighbors=5, metric='minkowski', p=2) classifier.fit(X_train, y_train) y_pred = classifier.predict(X_test) # confusion matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) # (0;0) predicciones de la clase 0 correctas # (1;0) predicciones de la clase 0 incorrectas (eran de la clase 1) # (0;1) predicciones de la clase 1 incorrectas (eran de la clase 0) # (1;1) predicciones de la clase 1 correctas # grafica de la clasificacion (regiones de prediccion) # al ser un modelo de clasificacion NO lineal, el limite de prediccion no es una linea recta from utils import plot_classification plot_classification(X_train, y_train, classifier, 'K-NN (Training Set)', 'Age', 'Estimated Salary') plot_classification(X_test, y_test, classifier, 'K-NN (Test Set)', 'Age', 'Estimated Salary')