3.1 試析在什么情形下式 (3.2) 中不必考慮偏置項 b.
1较木、訓練樣本中存在屬性為固定值(常量)红符,wxi等價于偏置項b
2、分析屬性值的變動對標志值的影響程度時伐债,不用考慮b
3预侯、當訓練的樣本集為原樣本集中每個樣本與任意一個樣本之差時,不用考慮b
4峰锁、根據
得到當所有標志值之和等于所有加權屬性值之和時萎馅,偏置項b等于0
5、當所有屬性值為零時標志值為零虹蒋,則偏置項b等于0
3.2 試證明糜芳,對于參數 ω,對率團歸的目標函數 (3.18)是非凸的魄衅,但其對數 似然函數(3.27)是凸的.
3.3 編程實現對率回歸峭竣,并給出西瓜數據集 3.0α 上的結果.
(相關資料顯示二范數誤差應小于0.0000001才能確定牛頓迭代最終解,但由于Spyder卡頓晃虫,所以暫時放寬為0.0001了)
import numpy as np
X = np.mat([[0.697,0.460,1],[0.556,0.215,1],[0.774,0.376,1],
? ? ? ? ? ? [0.634,0.264,1],[0.481,0.149,1],[0.608,0.318,1],[0.403,0.237,1],
? ? ? ? ? ? [0.666,0.091,1],[0.437,0.211,1],[0.243,0.267,1],? ?
? ? ? ? ? ? [0.245,0.057,1],[0.343,0.099,1],
? ? ? ? ? ? [0.639,0.161,1],[0.657,0.198,1],[0.360,0.370,1],
? ? ? ? ? ? [0.593,0.042,1],[0.719,0.103,1]]) #增加一個恒定屬性值為1的 屬性用來得到偏移量? ? ? ?
Y = np.array([1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0])?
beta = np.random.rand(3,1) #隨機生成初始β值
def getP1(X,beta):? ? #得到p1?
? ? m,n = X.shape
? ? P1 = []? ? ?
? ? for i in range(m):
? ? ? ? P1.append((np.e ** np.dot(X[i],beta)[0,0])/(1+np.e ** np.dot(X[i],beta)[0,0]))? ? ? ? #因dot結果還是一個矩陣mat皆撩,所以要將其轉成一個標量數值,用[0,0]
? ? return np.array(P1)? ? ?
def getDbeta(X,Y,beta):? ? #一階導數
? P1 = getP1(X,beta)
? m,n = X.shape
? Dbeta = np.zeros((3,1))
? for i in range(m):
? ? ? ? Dbeta += X[i].T*(Y[i]-P1[i])
? ? ? ? return -Dbeta? ?
def getD2beta(X,beta):? ? ? #二階導數
? ? ? P1 = getP1(X,beta)
? ? ? m,n? = X.shape
? ? ? D2beta = np.zeros((3,3))
? ? ? for i in range(m):
? ? ? ? ? D2beta += np.dot(X[i].T,X[i])*P1[i]*(1-P1[i])
? ? ? return np.mat(D2beta)
while np.linalg.norm(-np.dot(getD2beta(X,beta).I,getDbeta(X,Y,beta)))>0.0001:
? ? ? #如果新的beta值與之前的beta值差距(用二范數判斷)大于0.0001則繼續(xù)牛頓迭代
? ? ? beta1=beta-np.dot(getD2beta(X,beta).I,getDbeta(X,Y,beta))#書上的牛頓迭代公式
? ? ? beta=beta1
print(beta)#小于則輸出最終結果
圖中為求出的參數w1,w2,b
3.5 編輯實現線性判別分析哲银,并給出西瓜數據集 3.0α 上的結果.
import numpy as np
import matplotlib.pyplot as plt
X0 = np.array([[0.697,0.460],[0.774,0.376],[0.634,0.264],[0.608,0.318],[0.556,0.215], [0.403,0.237],[0.481,0.149],[0.437,0.211]])? ? ? # 第一類數據
X1 = np.array([[0.666,0.091],[0.243,0.267],[0.245,0.057],[0.343,0.099],[0.639,0.161],[0.657,0.198],[0.360,0.370], [0.593,0.042],[0.719,0.103]]) # 第二類數據
u0 = np.mean(X0,axis=0,keepdims=True)? # u0 第一類向量均值
u1 = np.mean(X1,axis=0,keepdims=True)? # u1 第二類向量均值
Sw = (X0-u0).T.dot(X0-u0) + (X1-u1).T.dot(X1-u1) #類內散度矩陣公式
w = np.linalg.inv(Sw).dot((u0-u1).T)#w=sw**-1(u0-u1)
print(w)
print("y={}x".format(w))
圖中為求出的參數w和投影直線
3.4 選擇兩個 UCI 數據集扛吞,比較 10 折交叉驗證法和留 法所估計出的對 率回歸的錯誤率.
修改多次仍報錯,這部分之后再補了荆责。
放一個詳細說明如何使用uci數據集的鏈接 https://blog.csdn.net/qq_32892383/article/details/82225663
3.6 線性判別分析僅在線性可分數據上能獲得理想結果?試設計一個改進 方法喻粹,使其能較好地用于非線性可分數據
1、高維映射后再投影到直線上
2草巡、參考支持向量機的核方法高維映射守呜,通過改變樣本屬性的維度將樣本集投射到一個更高維的空間內進行線性劃分,并且用核函數直接得到高維特征空間中樣本的內積山憨。
3查乒、參考在神經網絡中使用多層功能神經元,在輸出層和輸入層之間增加一層隱含層(輸入層經過第一次激活函數加工并通過閾值分類之后再一次函數加工并通過閾值分類)郁竟,考慮是否可以二次投影玛迄。
令碼長為 9,類別數為 4棚亩,試給出海明距離意義下理論最優(yōu)的 ECOC 二元碼井證明之.
海明距離蓖议,兩個編碼對應位上編碼不同的位數虏杰,多個編碼的海明距離意義下的最優(yōu)碼為任意兩個編碼海明距離最大,我理解為每兩組編碼的海明距離的積最大勒虾。
每一列的分類結果為兩個正例兩個反例時纺阔,編碼不相同的組數最多為四組,所以只要一個分類器下四個類別的的分類結果為兩正兩負時修然,所有不同編碼的組數之和為36,所以當海明距離為6 6 6 6 6 6時笛钝,積最大,所以前三個編碼可以是
當最后一個編碼全為0時愕宋,可實現任意兩個編碼的海明距離為6,但考慮實際某類的編碼不能全為0玻靡,不然則沒有對這類有劃分意義的分類器,所以將任意一位改為一中贝。
3.8* ECOC 編碼能起到理想糾錯作用的重要條件是:在每一位編碼上出錯 的概率相當且獨立.試析多分類任務經 ECOC 編碼后產生的二類分 類器滿足該條件的可能性及由此產生的影響.
類別之間的差異越相同囤捻,分類器會將測試樣例判斷為與測試樣例特征相似的類別所被判斷為的結果,所以當類別之間的特征越相似邻寿,出錯的概率越大最蕾,即出錯概率和類別之間的差異程度有關,每一位編碼出錯概率 大約正相關于測試樣例類別和與其相似的類別的差異程度老厌,所以當每個類別的差異程度相當時瘟则,出錯概率相當的可能性越大。
影響 在此基礎上才能再理論上產生理想的糾錯作用枝秤,另一方面醋拧,并不是編碼的理論性質越好,分類性能就越好淀弹,因為機器學習問題涉及很多因素丹壕,例如將多個類拆解為兩個"類別子集 式所形成的兩個類別子集的區(qū)分難度往往不同即其導致的二分類問題的難度不同;于是一個理論糾錯性質很好,導致的三分類問題較難的編碼薇溃,與另一 個理論糾錯性質差一些菌赖、但導致的二分類問題較簡單的編碼,最終產生的模型 性能孰強孰弱很難說
3.9 使用 OvR 和 MvM 將多分類任務分解為二分類任務求解時沐序,試述為何 無需專門針對類別不平衡性進行處理.
對 OvR琉用、MvM 來說,由于對每個類進行了相同的處理策幼,
拆解出的二分類任務中類別不平衡的影響會相互抵消邑时,所以無需專門處理。