49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
import config
|
|
import numpy as np
|
|
from sklearn.preprocessing import MinMaxScaler
|
|
from operator import itemgetter
|
|
from sklearn.linear_model import Lasso, Ridge, LinearRegression
|
|
|
|
|
|
def rank_to_dict(ranks, names):
|
|
ranks = np.abs(ranks)
|
|
minmax = MinMaxScaler()
|
|
ranks = minmax.fit_transform(
|
|
np.array(ranks).reshape(len(names), 1)).ravel()
|
|
ranks = map(lambda x: round(x, 4), ranks)
|
|
ranks = dict(zip(names, ranks))
|
|
ranks = sorted(ranks.items(), key=itemgetter(1), reverse=True)
|
|
return ranks
|
|
|
|
|
|
def flip_array(arr):
|
|
return -1 * arr + np.max(arr)
|
|
|
|
|
|
def get_ranks(lm: LinearRegression, ridge: Ridge, lasso: Lasso, rfe, f, names):
|
|
ranks = dict()
|
|
|
|
ranks[config.LINEAR_TITLE] = rank_to_dict(lm.coef_, names)
|
|
ranks[config.RIDGE_TITLE] = rank_to_dict(ridge.coef_, names)
|
|
ranks[config.LASSO_TITLE] = rank_to_dict(lasso.coef_, names)
|
|
ranks[config.RFE_TITLE] = rank_to_dict(flip_array(rfe.ranking_), names)
|
|
ranks[config.F_REGRESSION_TITLE] = rank_to_dict(f, names)
|
|
|
|
for key, value in ranks.items():
|
|
print(key, value, '\n')
|
|
|
|
return ranks
|
|
|
|
|
|
def calc_mean(ranks):
|
|
mean = {}
|
|
for key, value in ranks.items():
|
|
for item in value:
|
|
if (item[0] not in mean):
|
|
mean[item[0]] = 0
|
|
mean[item[0]] += item[1]
|
|
for key, value in mean.items():
|
|
res = value/len(ranks)
|
|
mean[key] = round(res, 4)
|
|
return sorted(mean.items(), key=itemgetter(1), reverse=True)
|