機(jī)器學(xué)習(xí)理論基礎(chǔ)
來自《scikit-learn機(jī)器學(xué)習(xí)》
過擬合和欠擬合
過擬合是指模型能很好的擬合訓(xùn)練樣本,但對(duì)新樣本的預(yù)測(cè)準(zhǔn)確性很差。 高方差
欠擬合是指 模型不能很好的擬合訓(xùn)練樣本寿桨,且對(duì)新樣本的預(yù)測(cè)準(zhǔn)確性也不是很好汉柒。 高偏差
成本函數(shù)
成本是衡量模型與訓(xùn)練樣本符合程度的指標(biāo)。簡(jiǎn)單的理解春叫,成本是針對(duì)所有的訓(xùn)練樣本肩钠,模型擬合出來的值與訓(xùn)練樣本的真實(shí)值的誤差平均值。模型訓(xùn)練的過程中象缀,要使成本函數(shù)的值最小蔬将。
學(xué)習(xí)曲線
學(xué)習(xí)曲線是指模型的準(zhǔn)確性與數(shù)據(jù)集大小的關(guān)系,通過學(xué)習(xí)曲線可以直觀的判斷模型訓(xùn)練的情況央星,方便改進(jìn)模型霞怀。
Pipeline流水線來構(gòu)造多項(xiàng)式模型
from sklearn.pipeline inport Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.liner_model import LinearRegression
def polymial_model(degree=1):
polynimail_features = PolymailFeatures(degree=degree,include_bias=False)
linear_regression = LinearRegression()
# 這是一個(gè)流水線,先增加多項(xiàng)式階數(shù)莉给,然后再用線性回歸算法來擬合數(shù)據(jù)毙石。
pipeline = Pipeline([("polynomail_features",polynomail_features),("linear_regressin",linear_regression])
return pipeline
學(xué)習(xí)曲線調(diào)包
from sklearn.model_selection import learning_curve
train_sizes, train_scores, test_scores = learn_curve(estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
模型的性能優(yōu)化
過擬合:獲取更多的訓(xùn)練樣本,或者減少輸入的特征數(shù)量
欠擬合:增加有價(jià)值的特征颓遏,增加多項(xiàng)式特征
Precision和Recall
Precision是預(yù)測(cè)為正的樣本中正確的概率徐矩。
Recall是所有正的樣本中預(yù)測(cè)成功的概率。
倆者一般都是相斥的叁幢,Precision大Recall小滤灯,Recall大Precision小
F1score
F1score用來判斷哪個(gè)算法好,因?yàn)楫?dāng)判斷算法的兩個(gè)指標(biāo)一個(gè)大一個(gè)小的時(shí)候曼玩,怎樣判斷哪個(gè)算法最好鳞骤,這就需要將兩個(gè)算法發(fā)在一起。
F1score = 2*(PR/P+R)
k臨近算法
核心思想是未標(biāo)記的樣本點(diǎn)黍判,由與它最接近的k的樣本值的類別來判斷豫尽。
偽代碼如下:
- 遍歷訓(xùn)練集中的所有樣本,計(jì)算每個(gè)樣本與X_test的距離顷帖,并將其保存在Distance數(shù)組中
- 對(duì)Distance數(shù)組進(jìn)行排序美旧,取最近的k個(gè)點(diǎn) 渤滞,記為X_knn
- 在X_knn中統(tǒng)計(jì)樣本類別的個(gè)數(shù)
- 待標(biāo)記樣本的類別就是在X_knn中樣本個(gè)數(shù)最多的那個(gè)類別。
優(yōu)點(diǎn):準(zhǔn)確度高榴嗅,對(duì)異常值和噪聲有較高的容忍度妄呕。
缺點(diǎn):計(jì)算量大,對(duì)內(nèi)存的要求也大嗽测。
算法參數(shù):k k值越大趴腋,模型的偏差越大,對(duì)噪聲數(shù)據(jù)不敏感论咏,欠擬合优炬。k值越小,過擬合
算法的變種:增加鄰居的權(quán)重厅贪,針對(duì)不同的鄰居指定不同的距離權(quán)重蠢护,距離越近,權(quán)重值越高养涮。
from sklearn.neighbors import KNeighborsClassifier
k = 5
clf = KNeighborsClassifier(n_neighbors=k)
clf.fit(X,y)
y_sample = clf.predict(X_sample)
knn算法也可以實(shí)現(xiàn)回歸擬合
from sklearn.neighbors import KNeighborsRegressor
可以用knn.score() 方法計(jì)算擬合曲線針對(duì)樣本的擬合準(zhǔn)確性
數(shù)據(jù)分割
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.2)
線性回歸算法
模型優(yōu)化:當(dāng)線性回歸模型太簡(jiǎn)單導(dǎo)致欠擬合時(shí)葵硕,我們可以增加特征多項(xiàng)式來讓線性模型更加地?cái)M合數(shù)據(jù)。
在scikit-learn里贯吓,線性回歸是由類 sklearn.linear_model.LinearRegression 實(shí)現(xiàn)懈凹,多項(xiàng)式由類 sklearn.preprocessing.PolynomailFeatures 實(shí)現(xiàn)。
邏輯回歸算法
邏輯回歸是實(shí)現(xiàn)分類問題的一種機(jī)器學(xué)習(xí)算法悄谐,它主要的思想是怎樣把預(yù)測(cè)值的輸出控制在0和1之間介评,我們知道線性回歸算法的預(yù)測(cè)值是正無窮到負(fù)無窮,那么怎樣把值的輸出控制在(0,1)之間呢爬舰?這就需要使用Sigmoid函數(shù)
g(z)=1/(1+e^{-z})
判斷條件是0.5们陆,大于0.5則為1,小于0.5則為0.