對數幾率回歸(邏輯回歸)


回歸:連續值預測

邏輯回歸:分類算法。–邏輯回歸是干什么?
定義:對定性變量的回歸分析;
定性:
定量:
之前的回歸模型,處理的是因變量是數值型區間(負無窮到正無窮)變量,建立的模型描述的是因變量Y與自變量(X)之間的線性關系。

在這里插入圖片描述

期望=期望參數與自變量的分別乘積和;
在這里插入圖片描述

邏輯變換的公式:要記住
在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述

注:結果是對稱的,一般情況是0.5;如果結果不是對稱的,一般情況不是0.5

在這里插入圖片描述在這里插入圖片描述

使用最小二乘法求:上面的函數服從正態分布,然后倒過來推。

在這里插入圖片描述

對數似然函數為:
lnL=
****

他是一個凸函數(相當於四個角的吊床)
在這里插入圖片描述

g()是1/(1 + e^(-z))

在這里插入圖片描述

第一個是批量;第二個是隨機。----接下來寫程序。

作業:

DOU是每個客戶月均流量消費額,單位MB

MOU(minutes of usage)。平均每戶每月通話時間(average communication time per one month per one user) 電信行業的一個衡量指標,單位:分鍾

在這里插入圖片描述

代碼:
import numpy as np def sigmoid(x): return 1/(1+np.exp(-x)) def weights(x_train, y_train):  # 獲取權重
    # 初始化參數
    theta = np.random.rand(3)  # 生成n個隨機數
    # 學習率
    alpha = 0.001
    # 迭代次數
    cnt = 0 # 最大迭代次數
    max_cnt = 50000
    # 誤差
    # error0=error1=1
    # 指定一個閾值,用於檢查兩次誤差的差,以便停止迭代
    threshold = 0.01 m,n = x_train.shape while cnt <= max_cnt: cnt += 1 diff = np.full(n, 0)  # 梯度的初始值三個零
        for i in range(m): # diff=(y_train-1/(1+np.exp(-theta.T@x_train.T)))@x_train).T #@是矩陣點乘,批量梯度下降
            diff = ((y_train[i]-sigmoid(theta.T@x_train[i])) * x_train[i]).T  # 外面的.T是表示所有的梯度去求解
            print(diff) theta = theta+alpha*diff if (abs(diff) < threshold).all(): break
    return theta def predict(x_test,weights): if sigmoid(weights.T@x_test)>0.5: return 1
    else: return 0 if __name__ == "__main__": x_train = np.array([[1, 2.697, 6.254], [1, 1.872, 2.014], [1, 2.312, 0.812], [1, 1.983, 4.990], [1, 0.932, 3.920], [1, 1.321, 5.583], [1, 2.215, 1.560], [1, 1.659, 2.932], [1, 0.865, 7.316], [1, 1.685, 4.763], [1, 1.786, 2.523]]) y_train = np.array([1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1]) weights=weights(x_train, y_train) print(predict([1, 1.786, 2.523],weights)) ························································· 輸出: [0.0003332  0.00089864 0.00208383] [0.00033319 0.00089862 0.00208379] 1 

最大迭代次數為5000的時候,預測結果為0,結果不理想:可能有幾種情況。
1)weihts權重沒有迭代到最理想的狀態;
2)數據異常(收斂異常)
3)激活函數選取不理想(收斂不理想)

sklearn中也提供了這個包,如何使用?

# -*- coding: utf-8 -*-
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split import numpy as np dataset=np.loadtxt("C:/Users/yanruyu/Documents/code/python/GA/dataset.txt",delimiter=',') x_train,x_test,y_train,y_test=train_test_split(dataset[:,0:-1],dataset[:,-1],test_size=0.3) model=LogisticRegression(penalty="l2")  #加入正則化參數,效率會提高很多。
model.fit(x_train,y_train) print(y_test==model.predict(x_text)) 輸出: [False True True True]

可以用線性模型中SGD分類模型試一下,不過要調參。

回歸:連續值預測

邏輯回歸:分類算法。–邏輯回歸是干什么?
定義:對定性變量的回歸分析;
定性
定量
之前的回歸模型,處理的是因變量是數值型區間(負無窮到正無窮)變量,建立的模型描述的是因變量Y與自變量(X)之間的線性關系。在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM