Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.05.2017
Сообщений: 117

Линейная и Логистическая Регрессия

07.11.2022, 09:06. Показов 756. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет. Дело такое:
Изучаю сейчас машинное обучение, а если конкретнее - Supervised Learning. С логистической регрессией у меня все вообще хорошо, код работает на ура. Вот код, который я написал:
Python
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer 
from sklearn.model_selection import train_test_split as tts
from sklearn.preprocessing import normalize
 
#Загрузка данных
cancer = load_breast_cancer()
cancerdata = pd.DataFrame(np.c_[cancer['data'], cancer['target']], 
                          columns= np.append(cancer['feature_names'], ['target']))
cancerdata.head()
m, n = cancerdata.shape
X = cancerdata.iloc[:, :-1].values
Y = cancerdata.iloc[:, n-1].values
Y = Y.reshape(-1, 1)
train_X, test_X, train_Y, test_Y = tts(X, Y, test_size = 50/569, shuffle = False)
m1, n = train_X.shape
m2, n = test_X.shape
train_X = normalize(train_X)
test_X = normalize(test_X)
XT = train_X.T
 
#Основные функции
def sigmoid(z):
    return 1/(1+np.exp(-z))
 
def cross_entropy_loss(y_pred,target):
    return -np.mean((target*np.log(y_pred+0.000001)+(1-target)*np.log(1-y_pred+0.000001)))
 
#Treshold
def predict(X_test):
    preds = []
    for i in sigmoid(np.dot(X_test, W) + b):
        if i>0.5:
            preds.append(1)
        else:
            preds.append(0)
    return preds
 
np.random.seed(0)
W = np.random.uniform(0,1,size=(n,1))
b=0.5
 
 
for i in range(100000000):
    Z = np.dot(train_X, W) + b
    Y_output = sigmoid(Z)
    E = cross_entropy_loss(Y_output, train_Y)
    print("Cross entropy loss: ",E)
    #գրադիենտ
    grad = Y_output - train_Y
    grad_weight = np.dot(XT,grad)/m1
    grad_bias = np.average(grad)
    #alpha=0.01
    W = W-.01*grad_weight
    b = b-.01*grad_bias
 
pred_Y = np.array(predict(test_X))
 
pred_Y1 = []
for i in range(50):
    tmp = [pred_Y[i]]
    pred_Y1.append(tmp)
pred_Y = np.array(pred_Y1)
 
check = pred_Y - test_Y
unique, counts = np.unique(check, return_counts=True)
При 100 млн итерации при проверке на 50 вводных данных получается 48 правильных.
Вот у меня актуальный код для линейной регрессии, который даже при 230 млн итерации даже близко не подходит к цели:
Python
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
import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split as tts
from sklearn.preprocessing import normalize
 
def init(n):
    return np.random.random((n,1))
 
boston = load_boston()
bostondata = pd.DataFrame(np.c_[boston['data'], boston['target']], 
                          columns= np.append(boston['feature_names'], ['target']))
X = bostondata.iloc[:, :-1].values
m, n = bostondata.shape
X = np.append(np.ones((m,1)), X, axis = 1)
Y = bostondata.iloc[:, n-1].values
Y = Y.reshape(-1, 1)
train_X, test_X, train_Y, test_Y = tts(X, Y, test_size = 106/506, shuffle = False)
m1, n = train_X.shape
m2, n = test_X.shape
train_X = normalize(train_X)
test_X = normalize(test_X)
 
teta = init(n)
XT = train_X.transpose()
dJ = np.dot(XT, (np.dot(train_X, teta)-train_Y))/m1
iteration = 0
while(np.max(np.abs(dJ))>0.00001):
    tetanew = teta-0.001*dJ
    teta = tetanew.copy()
    print(np.max(np.abs(dJ)))
    dJ = np.dot(XT, (np.dot(train_X, teta) - train_Y))/m1
    iteration += 1
 
pred_Y = np.dot(test_X, teta)
check = test_Y - pred_Y
Некоторые замечания заранее:
1. Тут у меня не используется MSE для градиентного спуска, а модуль разницы f(w,b)-y
2. Шаг и конченая цель dJ тут выбраны такими малыми, чтобы результат был четким, однако мой старый комп все равно за несколько часов смог сделать только 230 млн итерации,
3. Да, в обоих случаях я смог бы прибегать к нужным командам из библиотеки scikit, но текущая моя цель - понятие всего процесса.

Вопросы у меня такие:
1. Можно ли второй код оптимизировать по примеру первого? И как тут все устроить с MSE?
2. Как будут мои коды выглядеть при использовании scikit?
3. Возможна ли визуализация этих многомерных данных с помощью matplotlib?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2022, 09:06
Ответы с готовыми решениями:

Логистическая регрессия
Нашел готовую реализацию алгоритма логистической регрессии, но работает он довольно странно. Может быть кто-нибудь поможет найти проблему? ...

Логистическая регрессия Python
Коллеги, здравствуйте! У меня к вам следующий вопрос, буду рад, если дадите ответ или интересную мысль. У меня есть достаточный набор...

Множественная линейная регрессия
При отсутствии корреляционной зависимости (коэффициенты корреляции близки к нулю) имеет ли смысл построения множественной регрессии? ...

1
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
08.11.2022, 09:54
Лучший ответ Сообщение было отмечено Pascal61Am как решение

Решение

1. Для линейной регрессии итерации не нужны. Никто не говорил, что линейная регрессия в данном конкретном случае будет давать хороший результат. Все зависит от данных. Как вы сравниваете первый и второй случай, если у вас даже данные разные?
2.У scikit-learn прекрасная документация, с примерами, там все написано. Изучайте.
3. Да, см. Методы снижения размерности, PCA, t-SNE
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.11.2022, 09:54
Помогаю со студенческими работами здесь

ValueError. Линейная регрессия и нахождение среднеквадратичной ошибки на питоне
В задаче требуется найти среднеквадратичное отклонение для заданного набора данных. X - хранит в себе признаки, y - ожидаемые ответы. По...

Линейная парная регрессия. Линейная множественная регрессия
Народ, помогите плиз, очень надо. Ничего в статистике не понимаю. Нужно сделать задания в иксель. Вместо N поставить 4 (т.к. это мой...

Логистическая регрессия в Maple
Здравствуйте! Очень срочно необходимо написать логистическую регрессию в Maple. Буду рад любой помощи, в том числе и источникам откуда...

Критерий хи-квадрат и логистическая регрессия
Здравствуйте! У меня есть две биноминальные переменные х1 и х2. По ним я построила таблицу сопряженности и посчитала критерий...

Полиномиальная логистическая регрессия из документации sklearn
Здравствуйте, уважаемые форумчане! Изучаю полиномиальную логистическую регрессию и только нашёл только 1 код по ней, а именно - из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru