renamed hyperparams to gscv
This commit is contained in:
parent
a82358dbb4
commit
ad5ebad7f8
31 changed files with 4433 additions and 0 deletions
|
@ -1,158 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Created on Sun Mar 20 13:02:54 2022
|
||||
|
||||
@author: tanu
|
||||
"""
|
||||
# https://machinelearningmastery.com/hyperparameters-for-classification-machine-learning-algorithms/
|
||||
|
||||
#%% LogisticRegression
|
||||
# example of grid searching key hyperparametres for logistic regression
|
||||
from sklearn.datasets import make_blobs
|
||||
from sklearn.model_selection import RepeatedStratifiedKFold
|
||||
from sklearn.model_selection import GridSearchCV
|
||||
from sklearn.linear_model import LogisticRegression
|
||||
# define dataset
|
||||
X, y = make_blobs(n_samples=1000, centers=2, n_features=100, cluster_std=20)
|
||||
# define models and parameters
|
||||
model = LogisticRegression()
|
||||
solvers = ['newton-cg', 'lbfgs', 'liblinear']
|
||||
penalty = ['l2']
|
||||
c_values = [100, 10, 1.0, 0.1, 0.01]
|
||||
# define grid search
|
||||
grid = dict(solver=solvers,penalty=penalty,C=c_values)
|
||||
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
|
||||
grid_search = GridSearchCV(estimator=model, param_grid=grid, n_jobs=-1, cv=cv, scoring='accuracy',error_score=0)
|
||||
grid_result = grid_search.fit(X, y)
|
||||
# summarize results
|
||||
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
|
||||
means = grid_result.cv_results_['mean_test_score']
|
||||
stds = grid_result.cv_results_['std_test_score']
|
||||
params = grid_result.cv_results_['params']
|
||||
for mean, stdev, param in zip(means, stds, params):
|
||||
print("%f (%f) with: %r" % (mean, stdev, param))
|
||||
#%% RidgeClassifier
|
||||
from sklearn.datasets import make_blobs
|
||||
from sklearn.model_selection import RepeatedStratifiedKFold
|
||||
from sklearn.model_selection import GridSearchCV
|
||||
from sklearn.linear_model import RidgeClassifier
|
||||
# define dataset
|
||||
X, y = make_blobs(n_samples=1000, centers=2, n_features=100, cluster_std=20)
|
||||
# define models and parameters
|
||||
model = RidgeClassifier()
|
||||
alpha = [0.9, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.1, 1.0]
|
||||
# define grid search
|
||||
grid = dict(alpha=alpha)
|
||||
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
|
||||
grid_search = GridSearchCV(estimator=model, param_grid=grid, n_jobs=-1, cv=cv, scoring='accuracy',error_score=0)
|
||||
grid_result = grid_search.fit(X, y)
|
||||
# summarize results
|
||||
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
|
||||
means = grid_result.cv_results_['mean_test_score']
|
||||
stds = grid_result.cv_results_['std_test_score']
|
||||
params = grid_result.cv_results_['params']
|
||||
for mean, stdev, param in zip(means, stds, params):
|
||||
print("%f (%f) with: %r" % (mean, stdev, param))
|
||||
|
||||
# NOTES:
|
||||
# alpha: If all alphas return the same mean, which do you chose?
|
||||
# Python seems to chose the first one?
|
||||
# https://stats.stackexchange.com/questions/166950/alpha-parameter-in-ridge-regression-is-high
|
||||
# The L2 norm term in ridge regression is weighted by the regularization parameter
|
||||
# alpha. So, the alpha parameter need not be small. But, for a larger alpha, the
|
||||
# flexibility of the fit would be very strict.
|
||||
|
||||
# So, if the alpha value is 0, it means that it is just an Ordinary Least Squares
|
||||
# Regression model. So, the larger is the alpha, the higher is the smoothness constraint.
|
||||
# So, the smaller the value of alpha, the higher would be the magnitude of the coefficients.
|
||||
|
||||
# Could be that the model does not fit very well. With a very large alpha,
|
||||
# the algorithm more or else ignores the IV's and fits a mean. – Placidia
|
||||
# @Placidia, yes I would completely agree with your comment. I was just trying to
|
||||
# explain the significance of alpha as a parameter (as asked in the question) in
|
||||
# Ridge Regression, and how it's change would affect the fit and the coefficients.
|
||||
# Thank you for including the point in the comment.
|
||||
# ** READ: https://machinelearningcompass.com/machine_learning_models/ridge_regression/
|
||||
#%% KNeighborsClassifier
|
||||
from sklearn.datasets import make_blobs
|
||||
from sklearn.model_selection import RepeatedStratifiedKFold
|
||||
from sklearn.model_selection import GridSearchCV
|
||||
from sklearn.neighbors import KNeighborsClassifier
|
||||
# define dataset
|
||||
X, y = make_blobs(n_samples=1000, centers=2, n_features=100, cluster_std=20)
|
||||
# define models and parameters
|
||||
model = KNeighborsClassifier()
|
||||
n_neighbors = range(1, 21, 2)
|
||||
weights = ['uniform', 'distance']
|
||||
metric = ['euclidean', 'manhattan', 'minkowski']
|
||||
#p = [1,2]
|
||||
# define grid search
|
||||
grid = dict(n_neighbors=n_neighbors,weights=weights,metric=metric)
|
||||
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
|
||||
grid_search = GridSearchCV(estimator=model, param_grid=grid, n_jobs=-1, cv=cv, scoring='accuracy',error_score=0)
|
||||
grid_result = grid_search.fit(X, y)
|
||||
# summarize results
|
||||
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
|
||||
means = grid_result.cv_results_['mean_test_score']
|
||||
stds = grid_result.cv_results_['std_test_score']
|
||||
params = grid_result.cv_results_['params']
|
||||
for mean, stdev, param in zip(means, stds, params):
|
||||
print("%f (%f) with: %r" % (mean, stdev, param))
|
||||
|
||||
# NOTES:
|
||||
# https://vitalflux.com/k-nearest-neighbors-explained-with-python-examples/
|
||||
# https://vitalflux.com/overfitting-underfitting-concepts-interview-questions/
|
||||
# Larger value of K ==> model may underfit
|
||||
# Smaller value of K ==> the model may overfit.
|
||||
#%%Support Vector Machine (SVM)
|
||||
# example of grid searching key hyperparametres for SVC
|
||||
from sklearn.datasets import make_blobs
|
||||
from sklearn.model_selection import RepeatedStratifiedKFold
|
||||
from sklearn.model_selection import GridSearchCV
|
||||
from sklearn.svm import SVC
|
||||
# define dataset
|
||||
X, y = make_blobs(n_samples=1000, centers=2, n_features=100, cluster_std=20)
|
||||
# define model and parameters
|
||||
model = SVC()
|
||||
kernel = ['poly', 'rbf', 'sigmoid']
|
||||
C = [50, 10, 1.0, 0.1, 0.01]
|
||||
gamma = ['scale']
|
||||
# define grid search
|
||||
grid = dict(kernel=kernel,C=C,gamma=gamma)
|
||||
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
|
||||
grid_search = GridSearchCV(estimator=model, param_grid=grid, n_jobs=-1, cv=cv, scoring='accuracy',error_score=0)
|
||||
grid_result = grid_search.fit(X, y)
|
||||
# summarize results
|
||||
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
|
||||
means = grid_result.cv_results_['mean_test_score']
|
||||
stds = grid_result.cv_results_['std_test_score']
|
||||
params = grid_result.cv_results_['params']
|
||||
for mean, stdev, param in zip(means, stds, params):
|
||||
print("%f (%f) with: %r" % (mean, stdev, param))
|
||||
|
||||
# NOTES:
|
||||
# https://stats.stackexchange.com/questions/31066/what-is-the-influence-of-c-in-svms-with-linear-kernel
|
||||
# SVM terms: hyperplane, C and soft margins
|
||||
# hyperplane that can min(max(dist)) of the suppor vectors from tne hyperplane
|
||||
# High C ==> increase overfitting
|
||||
# Low C ==> increase underfitting
|
||||
|
||||
# But if C is a regularization parameter, why does a high C increase
|
||||
# overfitting, when generally speaking regularization is done to
|
||||
# mitigate overfitting, i.e., by creating a more general model?
|
||||
# C is a regularisation parameter, but it is essentially attached to
|
||||
# the data misfit term (the sum of the slack variables) rather than
|
||||
# the regularisation term (the margin bit), so a larger value of C
|
||||
# means less regularisation, rather than more. Alternatively you can
|
||||
# view the usual representation of the rgularisation parameter
|
||||
# as 1/C.
|
||||
|
||||
#C is a regularization parameter that controls the trade off
|
||||
#between the achieving a low training error and a low testing
|
||||
# error that is the ability to generalize your classifier to unseen data.
|
||||
|
||||
# C Parameter is used for controlling the outliers:
|
||||
# low C implies ==> we are allowing more outliers
|
||||
# high C implies we are allowing fewer outliers.
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue