import numpy as np
def softmax(x):
return np.exp(x) / np.sum(np.exp(x), axis=0)
Softmax funksiyasini sinflashtirish uchun, bir nechta o'zgaruvchilarni o'z ichiga olgan ma'lumotlar to'plamini ishlatish mumkin. Misol uchun, quyidagi kodda "X" va "y" o'zgaruvchilari uchun ma'lumotlar to'plami yaratilgan va "LogisticRegression" kutubxonasi yordamida sinflashtirish amalga oshirilgan:
from sklearn.linear_model import LogisticRegression
# Ma'lumotlar to'plami
X = [[0.5, 1], [0.7, 0.9], [0.2, 0.4], [0.4, 0.6], [0.3, 0.8], [0.1, 0.2], [0.25, 0.9], [0.6, 0.7], [0.8, 0.5], [0.9, 0.3]]
y = [0, 1, 0, 0, 1, 0, 1, 1, 1, 1]
# Sinflashtirish modelini yaratish
clf = LogisticRegression(random_state=0).fit(X, y)
# Yangi qiymatlar uchun sinflashtirishni aniqlash
print(clf.predict([[0.4, 0.5], [0.8, 0.9]]))
# Softmax funksiyasi yordamida sinflashtirishni aniqlash
print(softmax(clf.predict_proba([[0.4, 0.5], [0.8, 0.9]]))))
Bu kod, "X" va "y" o'zgaruvchilari uchun ma'lumotlar to'plamini yaratadi. "LogisticRegression" kutubxonasi yordamida sinflashtirish modeli yaratiladi va "fit()" yordamida ma'lumotlar to'plamiga mos keladi. "predict()" yordamida esa yangi qiymatlar uchun sinflashtirish aniqlanadi. "predict_proba()" yordamida esa yangi qiymatlar uchun sinflashtirishning taxminiy ehtimoliyliklari aniqlanadi. "softmax()" yordamida esa taxminiy ehtimoliyliklar softmax funksiyasi yordamida sinflashtirishga aylantiriladi.
Natijaviy chiqish quyidagicha bo'ladi:
Bu natijalardan ko'rib chiqilishi mumkinki, birinchi qiymat 0 ga, ikkinchi qiymat 1 ga mos keladi. Ikkinchi chiqish esa, birinchi qiymat 0.406 ga, ikkinchi qiymat 0.594 ga mos keladi.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
# Iris ma'lumotlar to'plami yuklanadi
iris = load_iris()
# Faqat 2 ta xususiyatni olish
X = iris.data[:, :2]
y = iris.target
# Softmax aktivlash funksiyasi bilan logistik regressiya modeli yaratiladi
clf = LogisticRegression(multi_class='multinomial', solver='lbfgs', random_state=0).fit(X, y)
# Natijalar hisoblanadi
xx, yy = np.mgrid[4:8:.01, 2:4.5:.01]
grid = np.c_[xx.ravel(), yy.ravel()]
probs = clf.predict_proba(grid).reshape(xx.shape + (3,))
# Grafik chiziladi
f, ax = plt.subplots(figsize=(8, 6))
contour = ax.contourf(xx, yy, probs.max(axis=2), 25, cmap="RdBu", vmin=0, vmax=1)
ax_c = f.colorbar(contour)
ax_c.set_label("Maksimal ehtimollik")
ax_c.set_ticks([0, .25, .5, .75, 1])
# Ma'lumotlar to'plami chiziladi
for i, color in zip([0, 1, 2], ['blue', 'red', 'green']):
idx = np.where(y == i)
ax.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i],
cmap="RdBu", edgecolor="white", s=200)
ax.set(title="Softmax aktivlash funksiyasi bilan logistik regressiya", xlabel="X1", ylabel="X2")
ax.legend()
plt.show()
Dostları ilə paylaş: |