3.監督學習
3.1.線性回歸
我們希望根據房子的居住尺寸來預測房價并得到房價與尺寸之間的線性關系。每個居住尺寸對應一個唯一且給定的住房價格,所以這是一個監督學習問題。我們希望獲得居住尺寸和房價兩個變量之間的關系,這是個回歸問題。由于求取的線性模型,所以得到的是個線性回歸問題。
令w=θ1,b=θ2。
-
歐式距離:歐幾里得度量(也稱歐式距離)是一個通常采用的距離定義,指在m維空間中兩個點之間的真實距離。
歐式距離.png -
曼哈頓距離:曼哈頓距離是使用在幾何度量空間的幾何學用語,用以標明兩個點在標準坐標系上的絕對軸距總和。
曼哈頓距離.png -
擬合曲線:在計算了每個點到各個擬合曲線之間的均方誤差后,可以得到使得誤差最小的擬合曲線,這樣的曲線我們稱之為最佳擬合曲線。對于線性關系顯著的數據集,最佳擬合曲線就是我們想要尋找的在該數據下的擬合曲線,我們可以看出最中間的曲線擬合效果最好。
擬合曲線.png -
線性規劃總結:
線性規劃總結.png
3.2多元線性回歸
-
特征縮放:是用來標準化數據特征的范圍,使得所有特征數據處于相同的大小維度上,從而避免模型對數據偏差處理,同時加快梯度下降的收斂速度。
從表格數據中我們可以看出,房子大小和臥室數量、洗手間數量在數值上不屬于一個數量級,這樣的數據在處理上容易使得模型傾向于用房子大小來決定最后的預測結果,所以我們需要用到特征縮放使所有特征處于相同數量級。
特征縮放.png -
比例調節:比例調節(rescaling)將數據的特征縮放到[0,1]或[-1.1]之間。縮放到什么范圍取決于數據的性質。公式如下所示:
比例調節.png -
標準化:特征標準化使每個特征的值有零均值和單位方差,公式如下所示:
標準化.png 多項式回歸:從已有特征中構造新的特征,得到的輸入是關于已有特征的多項式。
3.3python代碼
3.3.1梯度下降線性回歸模型
# 兼容 pythone2,3
from __future__ import print_function
# 導入相關python庫
import os
import numpy as np
import pandas as pd
#設定隨機數種子
np.random.seed(36)
#使用matplotlib庫畫圖
import matplotlib
import seaborn
import matplotlib.pyplot as plot
from sklearn import datasets
#讀取數據
housing = pd.read_csv('kc_train.csv')
target=pd.read_csv('kc_train2.csv') #銷售價格
t=pd.read_csv('kc_test.csv') #測試數據
#數據預處理
housing.info() #查看是否有缺失值
#特征縮放
from sklearn.preprocessing import MinMaxScaler
minmax_scaler=MinMaxScaler()
minmax_scaler.fit(housing) #進行內部擬合,內部參數會發生變化
scaler_housing=minmax_scaler.transform(housing)
scaler_housing=pd.DataFrame(scaler_housing,columns=housing.columns)
mm=MinMaxScaler()
mm.fit(t)
scaler_t=mm.transform(t)
scaler_t=pd.DataFrame(scaler_t,columns=t.columns)
#選擇基于梯度下降的線性回歸模型
from sklearn.linear_model import LinearRegression
LR_reg=LinearRegression()
#進行擬合
LR_reg.fit(scaler_housing,target)
#使用均方誤差用于評價模型好壞
from sklearn.metrics import mean_squared_error
preds=LR_reg.predict(scaler_housing) #輸入數據進行預測得到結果
mse=mean_squared_error(preds,target) #使用均方誤差來評價模型好壞,可以輸出mse進行查看評價值
#繪圖進行比較
plot.figure(figsize=(10,7)) #畫布大小
num=100
x=np.arange(1,num+1) #取100個點進行比較
plot.plot(x,target[:num],label='target') #目標取值
plot.plot(x,preds[:num],label='preds') #預測取值
plot.legend(loc='upper right') #線條顯示位置
plot.show()
#輸出測試數據
result=LR_reg.predict(scaler_t)
df_result=pd.DataFrame(result)
df_result.to_csv("result.csv")
3.3.2擴展多項式
使用多項式的方法來進行的,如果有a,b兩個特征,那么它的2次多項式為(1,a,b,a^2,ab, b^2),代碼為:
#構造多項式特征
from sklearn.preprocessing import PolynomialFeatures
poly_feature=PolynomialFeatures(degree=5,include_bias=False)
poly_housing=poly_feature.fit_transform(scaler_housing)
poly_t=poly_feature.fit_transform(scaler_t)
3.4邏輯回歸
邏輯回歸是用來做分類算法的,那么分類學習的概念是什么呢?
- 在機器學習和統計中,分類是根據包含已知類別成員的觀察值(或實例)的訓練數據集來確定新觀測值所屬的一組類別(子群)中的哪一個。
3.4.1模型
3.5過擬合
3.5.1過擬合
機器學習中,擬合優度(goodness of fit) 指的是模型預測值與真實值想匹配的程度。學習“噪聲”的模型被稱為是過擬合(overfit),在訓練集上表現良好,但是與新訓練集的擬合優度差,如下圖綠線所示。
- 檢測過擬合:把初始訓練集數據分為訓練集(train set)和驗證集(validation set),通過驗證集的輸出表現來判斷是否過擬合。
-
防止過擬合:
1.k折交叉驗證選擇訓練參數。
2.使用更多數據來訓練。
3.刪除部分相關度高的特征。
4.正則化。
5.過擬合前提停止訓練模型。
6.。。。。。
3.5.2欠擬合
與過擬合相對的擬合曲線被稱為是欠擬合(underfit),如下圖所示,對已有訓練集的擬合程度差,模型表現效果差,沒有學習到數據中的信息,這樣的擬合曲線被稱為欠擬合。
-
防止欠擬合:
1.選取或者構造新的特征。
2.增加模型復雜度。
3.檢查數據是否噪聲較大。
4.增加模型訓練時間。
5.。。。。。。
3.5.3誤差
統計學習和機器學習中模型或者結果的泛化誤差通常可以表示為三個不同誤差的總和:偏差、方差、殘差,也稱為噪聲。
- 偏差:期望輸出與真實標記的差別稱為偏差,由錯誤的模型假設造成的,模型呈現欠擬合的狀態。
- 方差:度量了同樣大小的訓練集變動所導致的學習性能的變化,即刻畫了數據擾動造成的影響。
- 噪聲:數據本身存在的誤差導致的學習困難。
-
期望泛化誤差:直接影響算法在新數據集上表現能力。是由方差+偏差+噪聲造成的。
即!!!增加模型的復雜度會增加預測結果的方差同時減小偏差,相反減小模型復雜度會增加偏差、減小方差,這就是為什么被稱為偏差與方差的權衡(bias/variance tradeoff)
3.5.4防止過擬合
K折交叉驗證
k折交叉驗證是評價模型的最好選擇之一,也可以在一定程度上減小過擬合。在標準的k折交叉驗證中,我們將數據劃分為k個子集,稱之為折疊(fold),然后迭代的用其中的k-1個子集用于模型訓練,同時將剩余的子集用于作為驗證集驗證模型。一般k=10
L2正則化
正則化也分為許多種,這里介紹兩種正則化方法:L1正則化、L2正則化。L1正則化方法又被稱為拉索回歸,L2正則化方法又被稱為嶺回歸。L2正則化將需要正則化系數的平方作為懲罰項。這個懲罰項會使梯度下降造成權重更新是更大的。
在L2正則化中λ是正則化系數,用于控制對于權重的懲罰。λ越大,權重越接近于0,使得擬合曲線更平緩從而減少過擬合的情況。
L1正則化
L1正則化的懲罰項為系數的絕對值。L2對大數比較敏感,對大數的懲罰力度也大,容易產生均勻解,而L1不會,產生比較稀疏的解,稀疏解就是結果中含0比較多的情況。
彈性網絡
彈性網絡是權衡L1正則化和L2正則化后得出的方法,通過控制混合比率r我們可以實現想要的正則化效果。其中,當r=0時,彈性網絡為L2正則化,當r=1時,彈性網絡為L1正則化。一般來說,彈性網絡比L1正則化更常用一些。
- 這種組合用于只有很少的權重非零的稀疏模型,比如拉索回歸,但是又能保持嶺回歸的正則化屬性,我們可以使用r參數來調節L1和L2的組合。
- 當多個特征和另一個特征相關的時候彈性網絡非常有用。拉索回歸傾向于隨機選擇其中一個,而彈性網絡更傾向于選擇兩個。
3.6K臨近算法(KNN)
3.6.1原理
K-NN算法的核心思想非常簡單:在訓練集中選取離輸入的數據點最近的k個鄰居,根據這個k個鄰居出現次數最多的類別(最大表決規則),作為該數據點的類別。
1.計算訓練樣本和測試樣本中每個樣本點的距離(常見的距離度量有歐氏距離,馬氏距離等)。
2.對上面所有的距離進行排序。
3.選前k個最小距離的樣本。
4.根據這k個樣本的標簽進行投票,得到最后的分類類別。
3.6.2KNN修正
經典k領域的樣本點對預測結果的貢獻度是相等的。而一個簡單的思想是距離更近的樣本點應有更大的相似度,其貢獻應比距離更遠的樣本點打。
3.6.3KNN優缺點
- 優點:精度高、對異常值不敏感,無數據輸入假定。
- 缺點:計算復雜度高、空間復雜度高。適用數據范圍:數值型和標稱型。
3.7支持向量機(SVM)
現在有一個二維平面,平面上有兩種不同的數據,分別用圈和叉表示。由于這些數據是線性可分的,所以可以用一條直線將這兩類數據分開,這條直線就相當于一個超平面,超平面一邊的數據點所對應的y全是-1,另一邊所對應的y全是1。SVM要解決的就是如何找到最優的分割超平面。
3.8樸素貝葉斯分類
-
思想:是一種基于統計學思想的方法
先驗概率+數據=后驗概率
-樸素貝葉斯分類器原理:對于給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬于哪個類別。
也就是說在感冒的情況下,哪種分類項出現的概率高,那么這個分類項就屬于蓋帽的結果。
- 優點:對小規模的數據表現很好,適合多分類任務,適合增量式訓練。
- 缺點:對輸入數據的表達形式很敏感。
3.9樹模型
- 定義:決策樹在分類問題中,表示基于特征對實例空間進行劃分的方法,可以視為if-then規則的集合,也可以認為是定義在特征空間和類空間上的條件概率分布。
- 基本步驟:1.特征選擇。2.決策樹生成。3.決策樹減枝。
3.9.1熵的定義
3.9.2決策樹生成
- 兩種經典算法:ID3,C4.5
-
基于信息增益特征選擇的ID3:
1.從根節點的全量數據開始,計算各特征的信息增益。
2.選取特征信息增益最大的構建分支,以特征類型將數據分割為各子數據集,并去除其使用的特征。
3.在分割的子數據集和子節點上,重復1.2步驟直到信息增益小于給定閾值或數據無特征為止,將其標簽的眾數作為類標簽。 - C4.5算法即為將ID3中的特征選擇方式由信息增益替換為信息增益比。
3.9.3決策時分類剪枝
實現方式:極小化決策樹整體的損失函數或者代價函數。
3.9.4混淆矩陣
3.9.5分類與回歸樹-CART
假設條件:CART假設決策時是二叉樹形式(也就是說一次的特征只能將數據集分為兩個類別)
與ID3,C4.5的不同:相對于ID3,C4.5來講,CART可以對于連續型變量進行分類和回歸,但每個特征只能對數據集進行二分類。
3.9.6決策樹優缺點
優點:
1.不需要任何領域知識或參數假設。
2.適合高維數據。
3.簡單易于理解。
4.短時間內處理大量數據,得到可行且效果較好的結果。缺點:
1.對于各類別樣本數量不一致數據,信息增益偏向于那些具有更多數值的特征。
2.易于過擬合,特別是在特征多的情況下,容易引入噪聲特征。
3.忽略屬性之間的相關性。
4.不支持在線學習。