# -*- coding: utf-8 -*-
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import numpy as np
torch.manual_seed(10)
# *************************=== step 1/5 生成資料 *************************===
sample_nums = 100
mean_value = 1.7
bias = 1
n_data = torch.ones(sample_nums, 2)
x0 = torch.normal(mean_value * n_data, 1) + bias # 類別0 資料 shape=(100, 2)
y0 = torch.zeros(sample_nums) # 類別0 標籤 shape=(100, 1)
x1 = torch.normal(-mean_value * n_data, 1) + bias # 類別1 資料 shape=(100, 2)
y1 = torch.ones(sample_nums) # 類別1 標籤 shape=(100, 1)
train_x = torch.cat((x0, x1), 0)
train_y = torch.cat((y0, y1), 0)
# *************************=== step 2/5 選擇模型 *************************===
class lr(nn.module):
def __init__(self):
super(lr, self).__init__()
self.features = nn.linear(2, 1)
self.sigmoid = nn.sigmoid()
def forward(self, x):
x = self.features(x)
x = self.sigmoid(x)
return x
lr_net = lr() # 例項化邏輯回歸模型
# *************************=== step 3/5 選擇損失函式 *************************===
loss_fn = nn.bceloss()
# *************************=== step 4/5 選擇優化器 *************************===
lr = 0.01 # 學習率
optimizer = torch.optim.sgd(lr_net.parameters(), lr=lr, momentum=0.9)
# *************************=== step 5/5 模型訓練 *************************===
for iteration in range(1000):
# 前向傳播
y_pred = lr_net(train_x)
# 計算 loss
loss = loss_fn(y_pred.squeeze(), train_y)
# 反向傳播
loss.backward()
# 更新引數
optimizer.step()
# 清空梯度
optimizer.zero_grad()
# 繪圖
if iteration % 20 == 0:
mask = y_pred.ge(0.5).float().squeeze() # 以0.5為閾值進行分類
correct = (mask == train_y).sum() # 計算正確**的樣本個數
acc = correct.item() / train_y.size(0) # 計算分類準確率
plt.scatter(x0.data.numpy()[:, 0], x0.data.numpy()[:, 1], c='r', label='class 0')
plt.scatter(x1.data.numpy()[:, 0], x1.data.numpy()[:, 1], c='b', label='class 1')
w0, w1 = lr_net.features.weight[0]
w0, w1 = float(w0.item()), float(w1.item())
plot_b = float(lr_net.features.bias[0].item())
plot_x = np.arange(-6, 6, 0.1)
plot_y = (-w0 * plot_x - plot_b) / w1
plt.xlim(-5, 7)
plt.ylim(-7, 7)
plt.plot(plot_x, plot_y)
plt.text(-5, 5, 'loss=%.4f' % loss.data.numpy(), fontdict=)
plt.title("iteration: {}\nw0: w1: b: accuracy:".format(iteration, w0, w1, plot_b, acc))
plt.legend()
plt.show()
plt.pause(0.5)
if acc > 0.99:
break
2 邏輯回歸
邏輯回歸函式模型 1 訓練資料繪圖 cd d study ai data ex2 data load ex2data1.txt x data 1,2 y data 3 pos find y 1 y取1的所有行 plot x pos,1 x pos,2 k linewidth 2,markersize...
CTR預估(2) 邏輯回歸
1 前面的知識基礎 關於ctr 常用的模型就是邏輯回歸,線性 可以直觀的反應出各個變數在 中的權重比較有利於運營部門,大約70 的模型都是採用邏輯回歸模型。首先就是從使用者資訊廣告資訊以及上下文資訊中提取出特徵來然後進行訓練。2 數學基礎 區域性最優解如何成為全域性最優解?對於凸函式來說以上問題成立...
02演算法梳理2 邏輯回歸
2.邏輯回歸的原理 3.邏輯回歸損失函式推導及優化 4.正則化與模型評估方法 5.邏輯回歸優缺點 6.樣本不均衡問題解決方案 7.sklearn引數 兩者都屬與廣義線性回歸模型。通過sigimoid函式,將線性線性轉化成非線性函式。數值越大越趨向於0,越小越趨向於1.在損失函式後加乙個正則化項,酒時...