-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogit_model.py
More file actions
52 lines (46 loc) · 2.29 KB
/
logit_model.py
File metadata and controls
52 lines (46 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import pandas as pd
import sklearn as sk
df = pd.read_csv('data.csv')
name_list = []
for i in df.columns:
if df[i].dtype.name not in ['float64', 'int64']:
name_list.append(str(df[i].name))
# Вывод таблицы баланса каждого столбца
# else:
# print(df[i].value_counts(normalize=True, dropna=False))
print(df.head(5))
df = df.drop(name_list, axis=1)
print(f'Число объектов: {df.shape[0]}')
print(f'Число признаков (с учётом целевой переменной): {df.shape[1]}')
print(f'Баланс классов: {df['target'].value_counts()}')
# Устранение дубликатов, заполнение пропущенных значений
print(f'Количество нулей: {df.isnull().sum()}')
df.fillna(value=0, inplace=True) # Заполнение NaN нулями
# Альтернатива - заполнение средним значением, результаты выглядят лучше
# df = df.fillna(df.mean())
#
print(f'Число дубликатов: {df.duplicated().sum()}')
df = df.drop_duplicates()
print(f'Удалим дубликаты... число объектов: {df.shape[0]}')
# Разбиение на обучающую / контрольную выборки, стандартизация
X_tab = df.drop('target', axis=1)
y_tab = df[['target']]
print('Выделяем тестовую выборку...')
X_train, X_test, y_train, y_test = sk.model_selection.train_test_split(X_tab, y_tab, test_size=0.33)
scaler = sk.preprocessing.StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# Логистическая регрессия
log_regression = sk.linear_model.LogisticRegression(max_iter=1000,
class_weight="balanced")
model = log_regression.fit(X_train, y_train.values.ravel())
y_res = model.predict(X_test)
# accuracy_score, precision_score, recall_score, f1_score
accuracy = sk.metrics.accuracy_score(y_test, y_res)
print(f'Accuracy score: {accuracy}')
precision = sk.metrics.precision_score(y_test, y_res)
print(f'Precision score: {precision}')
recall = sk.metrics.recall_score(y_test, y_res)
print(f'Recall score: {recall}')
f1 = sk.metrics.f1_score(y_test, y_res)
print(f'F1 score: {f1}')