線(xiàn)性回歸题翻、嶺回歸揩徊、邏輯回歸、聚類(lèi)

分類(lèi)算法的目標(biāo)值是離散型的
如果目標(biāo)值是連續(xù)型的值嵌赠,就需要回歸算法
比如房?jī)r(jià)預(yù)測(cè)塑荒、銷(xiāo)售額預(yù)測(cè)、貸款額度預(yù)測(cè)等

回歸算法-線(xiàn)性回歸分析

舉個(gè)栗子

期末成績(jī):0.7×考試成績(jī)+0.3×平時(shí)成績(jī)(各個(gè)特征跟某個(gè)值組合在一起去預(yù)測(cè))

西瓜好壞:0.2×色澤+0.5×根蒂+0.3×敲聲(把回歸問(wèn)題轉(zhuǎn)換為分類(lèi)問(wèn)題)

線(xiàn)性關(guān)系模型

一個(gè)通過(guò)屬性的線(xiàn)性組合來(lái)進(jìn)行預(yù)測(cè)的函數(shù):

f(x)=w_1 x_1+w_2 x_2 + ... + w_d x_d+b\\w為權(quán)重姜挺,b稱(chēng)為偏置項(xiàng)齿税,可以理解為:w_0×1

線(xiàn)性回歸

定義:線(xiàn)性回歸通過(guò)一個(gè)或者多個(gè)自變量與因變量之間之間進(jìn)行建模的回歸分析。其中特點(diǎn)為一個(gè)或多個(gè)稱(chēng)為回歸系數(shù)的模型參數(shù)的線(xiàn)性組合

一元線(xiàn)性回歸:涉及到的變量只有一個(gè)

多元線(xiàn)性回歸:涉及到的變量?jī)蓚€(gè)或兩個(gè)以上

通用公式:
h(w)= w_0 + w_1 x_1 + w_2 x_2+… = w^T x

其中w,x為矩陣:
w = \begin{pmatrix} w_0 \\ w_1 \\ w_2 \end{pmatrix}, x = \begin{pmatrix} 1 \\ x_1 \\ x_2 \end{pmatrix}
屬性和權(quán)重的一種組合來(lái)預(yù)測(cè)結(jié)果

矩陣也是大多數(shù)算法的計(jì)算基礎(chǔ)

矩陣乘法:
(m行, l列)*(l行, n列) = (m行, n行)
(這線(xiàn)性代數(shù)我是記不住咯…)

預(yù)測(cè)結(jié)果與真實(shí)值是有一定的誤差

單變量:

多變量:


回歸算法是迭代的算法

損失函數(shù)(誤差大小)

  • y_i為第i個(gè)訓(xùn)練樣本的真實(shí)值
  • h_w (x_i)為第i個(gè)訓(xùn)練樣本特征值組合預(yù)測(cè)函數(shù)

總損失定義:
??(\theta)= (?_?? (??_1) ???_1 )^2+(?_?? (??_2) ???_2 )^2+…+(?_?? (??_??) ???_?? )^2 =\sum_{??=1}^{??}(?_?? (??_?? )???_?? )^2
又稱(chēng)最小二乘法

如何去求模型當(dāng)中的W炊豪,使得損失最辛杌?(目的是找到最小損失對(duì)應(yīng)的W值)

最小二乘法之正規(guī)方程

求解:
??=(??^?? ??)^{?1} ??^?? ??
??為特征值矩陣词渤,??為目標(biāo)值矩陣

缺點(diǎn):當(dāng)特征過(guò)于復(fù)雜牵舱,求解速度太慢
對(duì)于復(fù)雜的算法,不能使用正規(guī)方程求解(邏輯回歸等)

損失函數(shù)直觀(guān)圖(單變量舉例)

直接求解到最小值

最小二乘法之梯度下降

我們以單變量中的w0,w1為例子:
w_1 = -w_1 - \alpha \frac{\delta cost(w_0+w_1x_1)}{\delta w_1}

w_0 = -w_0 - \alpha \frac{\delta cost(w_0+w_1x_1)}{\delta w_1}

\alpha為學(xué)習(xí)效率缺虐,需要手動(dòng)指定芜壁,\frac{\delta cost(w_0+w_1x_1)}{\delta w_1}表示方向

理解:沿著這個(gè)函數(shù)下降的方向找,最后就能找到山谷的最低點(diǎn),然后更新W值

使用:面對(duì)訓(xùn)練數(shù)據(jù)規(guī)模十分龐大的任務(wù)

sklearn線(xiàn)性回歸正規(guī)方程慧妄、梯度下降A(chǔ)PI

正規(guī)方程: sklearn.linear_model.LinearRegression

梯度下降: sklearn.linear_model.SGDRegressor

LinearRegression顷牌、SGDRegressor

普通最小二乘線(xiàn)性回歸

  • sklearn.linear_model.LinearRegression()
  • coef_:回歸系數(shù)

通過(guò)使用SGD最小化線(xiàn)性模型

  • sklearn.linear_model.SGDRegressor( )
  • coef_:回歸系數(shù)

波士頓房?jī)r(jià)數(shù)據(jù)案例分析流程

  1. 波士頓地區(qū)房?jī)r(jià)數(shù)據(jù)獲取

  2. 波士頓地區(qū)房?jī)r(jià)數(shù)據(jù)分割

  3. 訓(xùn)練與測(cè)試數(shù)據(jù)標(biāo)準(zhǔn)化處理

  4. 使用最簡(jiǎn)單的線(xiàn)性回歸模型LinearRegression和梯度下降估計(jì)SGDRegressor對(duì)房?jī)r(jià)進(jìn)行預(yù)測(cè)

屬性名 解釋 類(lèi)型
CRIM 城鎮(zhèn)人均犯罪率 連續(xù)值
ZN 住宅用地超過(guò) 25000 sq.ft. 的比例 連續(xù)值
INDUS 城鎮(zhèn)非零售商用土地的比例 連續(xù)值
CHAS 查理斯河空變量(如果邊界是河流, 則為1; 否則為0) 離散值
NOX 一氧化氮濃度 連續(xù)值
RM 住宅平均房間數(shù) 連續(xù)值
AGE 1940 年之前建成的自用房屋比例 連續(xù)值
DIS 到波士頓五個(gè)中心區(qū)域的加權(quán)距離 連續(xù)值
RAD 輻射性公路的接近指數(shù) 連續(xù)值
TAX 每 10000 美元的全值財(cái)產(chǎn)稅率 連續(xù)值
PTRATIO 城鎮(zhèn)師生比例 連續(xù)值
B 1000(Bk-0.63)^ 2,其中 Bk 指代城鎮(zhèn)中黑人的比例 連續(xù)值
LSTAT 人口中地位低下者的比例 連續(xù)值

這個(gè)數(shù)據(jù)集一共有13個(gè)特征塞淹,所以我們需要求出13個(gè)權(quán)重

正規(guī)方程

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error


def mylinear():
    """
    線(xiàn)性回歸直接預(yù)測(cè)房子價(jià)格
    :return: None
    """
    # 獲取數(shù)據(jù)
    lb = load_boston()

    # 分割數(shù)據(jù)集到訓(xùn)練集和測(cè)試集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    # 進(jìn)行標(biāo)準(zhǔn)化處理(目標(biāo)值要進(jìn)行標(biāo)準(zhǔn)化處理)
    # 特征值和目標(biāo)值都必須進(jìn)行標(biāo)準(zhǔn)化處理, 實(shí)例化兩個(gè)標(biāo)準(zhǔn)化API
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)

    # 目標(biāo)值
    std_y = StandardScaler()
    y_train = std_y.fit_transform(y_train.reshape(-1, 1))
    y_test = std_y.transform(y_test.reshape(-1, 1))

    # estimator預(yù)測(cè)
    # 正規(guī)方程求解方式預(yù)測(cè)結(jié)果
    lr = LinearRegression()
    lr.fit(x_train, y_train)

    print(lr.coef_)

    # 預(yù)測(cè)測(cè)試集的房子價(jià)格
    y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
    print("正規(guī)方程測(cè)試集里面每個(gè)房子的預(yù)測(cè)價(jià)格: ", y_lr_predict)
    print("正規(guī)方程的均方誤差: ", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict))
    
    
if __name__ == "__main__":
    mylinear()

梯度下降

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error


def mylinear():
    """
    線(xiàn)性回歸直接預(yù)測(cè)房子價(jià)格
    :return: None
    """
    # 獲取數(shù)據(jù)
    lb = load_boston()

    # 分割數(shù)據(jù)集到訓(xùn)練集和測(cè)試集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    # 進(jìn)行標(biāo)準(zhǔn)化處理(目標(biāo)值要進(jìn)行標(biāo)準(zhǔn)化處理)
    # 特征值和目標(biāo)值都必須進(jìn)行標(biāo)準(zhǔn)化處理, 實(shí)例化兩個(gè)標(biāo)準(zhǔn)化API
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)

    # 目標(biāo)值
    std_y = StandardScaler()
    y_train = std_y.fit_transform(y_train.reshape(-1, 1))
    y_test = std_y.transform(y_test.reshape(-1, 1))

    # estimator預(yù)測(cè)
    # 梯度下降進(jìn)行房?jī)r(jià)預(yù)測(cè)
    sgd = SGDRegressor()
    sgd.fit(x_train, y_train)

    print(sgd.coef_)

    # 預(yù)測(cè)測(cè)試集的房子價(jià)格
    y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))
    print("梯度下降測(cè)試集里面每個(gè)房子的預(yù)測(cè)價(jià)格: ", y_sgd_predict)
    print("梯度下降的均方誤差: ", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict))


if __name__ == "__main__":
    mylinear()

回歸性能評(píng)估

(均方誤差(Mean Squared Error)MSE) 評(píng)價(jià)機(jī)制:
MSE = \frac{1}{m} \sum_{i=1}^m(y^i-\bar{y})^2\\注意:y^i為預(yù)測(cè)值窟蓝,\bar{y}為真實(shí)值
這個(gè)非常簡(jiǎn)單,就是你的預(yù)測(cè)值和真實(shí)值之間的差值的平方和求一個(gè)平均值

sklearn回歸評(píng)估API

sklearn.metrics.mean_squared_error

mean_squared_error

mean_squared_error(y_true, y_pred)

  • 均方誤差回歸損失
  • y_true:真實(shí)值
  • y_pred:預(yù)測(cè)值
  • return:浮點(diǎn)數(shù)結(jié)果

注:真實(shí)值窖铡,預(yù)測(cè)值為標(biāo)準(zhǔn)化之前的值

官方給我們的一些建議

正規(guī)方程與梯度下降的對(duì)比

梯度下降 正規(guī)方程
需要選擇學(xué)習(xí)率α 不需要
需要多次迭代 一次運(yùn)算得出
當(dāng)特征數(shù)量n大時(shí)也能較好適用 需要計(jì)算(XTX)-1<br />如果特征數(shù)量n較大則運(yùn)算代價(jià)大疗锐,因?yàn)榫仃嚹娴挠?jì)算時(shí)間復(fù)雜度為O(n^3),通常來(lái)說(shuō)當(dāng)n小于10000時(shí)還是可以接受的
適用于各種類(lèi)型的模型 只適用于線(xiàn)性模型费彼,不適合邏輯回歸模型等其他模型

線(xiàn)性回歸器是最為簡(jiǎn)單滑臊、易用的回歸模型。

從某種程度上限制了使用箍铲,盡管如此雇卷,在不知道特征之間關(guān)系的前提下,我們?nèi)匀皇褂镁€(xiàn)性回歸器作為大多數(shù)系統(tǒng)的首要選擇颠猴。

  • 小規(guī)模數(shù)據(jù):LinearRegression(不能解決擬合問(wèn)題)以及其它
  • 大規(guī)模數(shù)據(jù):SGDRegressor

過(guò)擬合與欠擬合

問(wèn)題:訓(xùn)練數(shù)據(jù)訓(xùn)練的很好啊关划,誤差也不大,為什么在測(cè)試集上面有問(wèn)題呢翘瓮?


分析圖1:

經(jīng)過(guò)訓(xùn)練后贮折,知道了天鵝是有翅膀的,天鵝的嘴巴是長(zhǎng)長(zhǎng)的资盅。簡(jiǎn)單的認(rèn)為有這些特征的都是天鵝调榄。因?yàn)闄C(jī)器學(xué)習(xí)到的天鵝特征太少了,導(dǎo)致區(qū)分標(biāo)準(zhǔn)太粗糙呵扛,不能準(zhǔn)確識(shí)別出天鵝每庆。

分析圖2:

機(jī)器通過(guò)這些圖片來(lái)學(xué)習(xí)天鵝的特征,經(jīng)過(guò)訓(xùn)練后今穿,知道了天鵝是有翅膀的缤灵,天鵝的嘴巴是長(zhǎng)長(zhǎng)的彎曲的,天鵝的脖子是長(zhǎng)長(zhǎng)的有點(diǎn)曲度蓝晒,天鵝的整個(gè)體型像一個(gè)"2"且略大于鴨子腮出。這時(shí)候機(jī)器已經(jīng)基本能區(qū)別天鵝和其他動(dòng)物了。然后拔创,很不巧已有的天鵝圖片全是白天鵝的利诺,于是機(jī)器經(jīng)過(guò)學(xué)習(xí)后,會(huì)認(rèn)為天鵝的羽毛都是白的剩燥,以后看到羽毛是黑的天鵝就會(huì)認(rèn)為那不是天鵝慢逾。

過(guò)擬合與欠擬合

過(guò)擬合:一個(gè)假設(shè)在訓(xùn)練數(shù)據(jù)上能夠獲得比其他假設(shè)更好的擬合立倍, 但是在訓(xùn)練數(shù)據(jù)外的數(shù)據(jù)集上卻不能很好地?cái)M合數(shù)據(jù),此時(shí)認(rèn)為這個(gè)假設(shè)出現(xiàn)了過(guò)擬合的現(xiàn)象侣滩。(模型過(guò)于復(fù)雜)

欠擬合:一個(gè)假設(shè)在訓(xùn)練數(shù)據(jù)上不能獲得更好的擬合口注, 但是在訓(xùn)練數(shù)據(jù)外的數(shù)據(jù)集上也不能很好地?cái)M合數(shù)據(jù),此時(shí)認(rèn)為這個(gè)假設(shè)出現(xiàn)了欠擬合的現(xiàn)象君珠。(模型過(guò)于簡(jiǎn)單)

對(duì)線(xiàn)性模型進(jìn)行訓(xùn)練學(xué)習(xí)會(huì)變成復(fù)雜模型

欠擬合原因以及解決辦法

  • 原因:學(xué)習(xí)到數(shù)據(jù)的特征過(guò)少
  • 解決辦法:增加數(shù)據(jù)的特征數(shù)量

過(guò)擬合原因以及解決辦法

  • 原因:原始特征過(guò)多寝志,存在一些嘈雜特征, 模型過(guò)于復(fù)雜是因?yàn)槟P蛧L試去兼顧各個(gè)測(cè)試數(shù)據(jù)點(diǎn)策添,數(shù)據(jù)的特征和目標(biāo)值之間不僅僅是線(xiàn)性關(guān)系

  • 解決辦法:

    • 進(jìn)行特征選擇材部,消除關(guān)聯(lián)性大的特征(很難做)
    • 交叉驗(yàn)證(讓所有數(shù)據(jù)都有過(guò)訓(xùn)練)
    • 正則化

回憶一下特征選擇方法:

  • 過(guò)濾式:低方差特征
  • 嵌入式:正則化,決策樹(shù)唯竹,神經(jīng)網(wǎng)絡(luò)

L2正則化

作用:可以使得W的每個(gè)元素都很小乐导,都接近于0

優(yōu)點(diǎn):越小的參數(shù)說(shuō)明模型越簡(jiǎn)單,越簡(jiǎn)單的模型則越不容易產(chǎn)生過(guò)擬合現(xiàn)象

線(xiàn)性回歸:LinearRegression 容易出現(xiàn)過(guò)擬合浸颓,為了把訓(xùn)練接數(shù)據(jù)表現(xiàn)更好

L2正則化:Ridge:嶺回歸 帶有正則化的線(xiàn)性回歸 解決過(guò)擬合

嶺回歸

帶有正則化的線(xiàn)性回歸-Ridge

sklearn.linear_model.Ridge

Ridge

具有l(wèi)2正則化的線(xiàn)性最小二乘法

  • sklearn.linear_model.Ridge(alpha=1.0)
    • alpha:正則化力度
    • coef_:回歸系數(shù)

觀(guān)察正則化程度的變化物臂,對(duì)結(jié)果的影響

正則化力度越來(lái)越大,模型越來(lái)越簡(jiǎn)單

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error


def mylinear():
    """
    線(xiàn)性回歸直接預(yù)測(cè)房子價(jià)格
    :return: None
    """
    # 獲取數(shù)據(jù)
    lb = load_boston()

    # 分割數(shù)據(jù)集到訓(xùn)練集和測(cè)試集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    # 進(jìn)行標(biāo)準(zhǔn)化處理(目標(biāo)值要進(jìn)行標(biāo)準(zhǔn)化處理)
    # 特征值和目標(biāo)值都必須進(jìn)行標(biāo)準(zhǔn)化處理, 實(shí)例化兩個(gè)標(biāo)準(zhǔn)化API
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)

    # 目標(biāo)值
    std_y = StandardScaler()
    y_train = std_y.fit_transform(y_train.reshape(-1, 1))
    y_test = std_y.transform(y_test.reshape(-1, 1))

    # estimator預(yù)測(cè)
    # 嶺回歸去進(jìn)行房?jī)r(jià)預(yù)測(cè)
    rd = Ridge(alpha=1.0)
    rd.fit(x_train, y_train)

    print(rd.coef_)

    # 預(yù)測(cè)測(cè)試集的房子價(jià)格
    y_rd_predict = std_y.inverse_transform(rd.predict(x_test))
    print("嶺回歸測(cè)試集里面每個(gè)房子的預(yù)測(cè)價(jià)格: ", y_rd_predict)
    print("嶺回歸的均方誤差: ", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict))


if __name__ == "__main__":
    mylinear()

線(xiàn)性回歸 LinearRegression與Ridge對(duì)比

嶺回歸:回歸得到的回歸系數(shù)更符合實(shí)際产上,更可靠棵磷。另外,能讓估計(jì)參數(shù)的波動(dòng)范圍變小晋涣,變的更穩(wěn)定仪媒。在存在病態(tài)數(shù)據(jù)偏多的研究中有較大的實(shí)用價(jià)值。

模型的保存與加載

import joblib

保存:joblib.dump(rf, 'test.pkl')

加載:estimator = joblib.load('test.pkl')

注:文件格式pkl

分類(lèi)算法-邏輯回歸

他叫邏輯回歸…可他是分類(lèi)算法

邏輯回歸:線(xiàn)性回歸的式子作為邏輯回歸的輸入谢鹊,適用于二分類(lèi)場(chǎng)景规丽,他也能得出概率值

  • 廣告點(diǎn)擊率
  • 判斷用戶(hù)的性別
  • 預(yù)測(cè)用戶(hù)是否會(huì)購(gòu)買(mǎi)給定的商品類(lèi)
  • 判斷一條評(píng)論是正面的還是負(fù)面的

邏輯回歸是解決二分類(lèi)問(wèn)題的利器

邏輯回歸

輸入:
h(w)= w_0+w_1 x_1+w_2 x_2+…= w^T x

sigmoid函數(shù)

邏輯回歸的輸入-sigmoid→分類(lèi)

sigmodid函數(shù)會(huì)把值映射到[0, 1],也就是把我們的輸入值轉(zhuǎn)換成一個(gè)概率值

邏輯回歸公式

公式:
h_0(x)=g(\theta^Tx) = \frac{1}{1+e^{-\theta^Tx}}\\ g(z) = \frac{1}{1+e^{-z}}

輸出:[0,1]區(qū)間的概率值撇贺,默認(rèn)0.5作為閥值

注:g(z)為sigmoid函數(shù)

邏輯回歸的損失函數(shù)、優(yōu)化

與線(xiàn)性回歸原理相同,但由于是分類(lèi)問(wèn)題冰抢,損失函數(shù)不一樣松嘶,只能通過(guò)梯度下降求解

對(duì)數(shù)似然損失函數(shù):
cost(h_\theta(x), y) = \begin{cases} -log(h_\theta(x)) & if ~y=1 \\ -log(1-h_\theta(x)) & if~y=0\end{cases} \to -logP(Y|X)

完整的損失函數(shù):
cost(h_\theta(x), y) = \sum_{i=1}^m-y_ilog(h_\theta(x)) - (1 - y_i)log(1 - h_\theta(x))
cost損失的值越小,那么預(yù)測(cè)的類(lèi)別準(zhǔn)確度更高

損失函數(shù):

  • 均方誤差:不存在多個(gè)局部最低點(diǎn)挎扰,只有一個(gè)最小值
  • 對(duì)數(shù)似然損失:多個(gè)局部最小值

對(duì)數(shù)似然損失求出來(lái)的不一定是總函數(shù)的最小值翠订,目前還是一個(gè)解決不了的問(wèn)題,但是我們可以采取一些方案去盡量改善:

  1. 多次隨機(jī)初始化遵倦,多次比較最小值結(jié)果
  2. 求解過(guò)程中尽超,調(diào)整學(xué)習(xí)率

盡管沒(méi)有全局最低點(diǎn),但是效果都是不錯(cuò)的

sklearn邏輯回歸API

sklearn.linear_model.LogisticRegression

LogisticRegression

sklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0)

  • Logistic回歸分類(lèi)器
  • coef_:回歸系數(shù)

LogisticRegression回歸案例

良/惡性乳腺癌腫瘤預(yù)測(cè)

原始數(shù)據(jù)的下載地址:

https://archive.ics.uci.edu/ml/machine-learning-databases/

數(shù)據(jù)描述

(1)699條樣本梧躺,共11列數(shù)據(jù)似谁,第一列用語(yǔ)檢索的id傲绣,后9列分別是與腫瘤相關(guān)的醫(yī)學(xué)特征,最后一列表示腫瘤類(lèi)型的數(shù)值巩踏。

(2)包含16個(gè)缺失值秃诵,用”?”標(biāo)出。

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge, LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, classification_report
import joblib
import pandas as pd
import numpy as np
import ssl


def logistic():
    """
    邏輯回歸做二分類(lèi)進(jìn)行癌癥預(yù)測(cè)(根據(jù)細(xì)胞的屬性特征)
    :return: None
    """
    ssl._create_default_https_context = ssl._create_unverified_context
    # 構(gòu)造列標(biāo)簽名字
    column = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion', 'Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']

    # 讀取數(shù)據(jù)
    data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=column)

    print(data)

    # 缺失值進(jìn)行處理
    data = data.replace(to_replace='?', value=np.nan)

    data = data.dropna()

    # 進(jìn)行數(shù)據(jù)的分割
    x_train, x_test, y_train, y_test = train_test_split(data[column[1:10]], data[column[10]], test_size=0.25)

    # 進(jìn)行標(biāo)準(zhǔn)化處理
    std = StandardScaler()

    x_train = std.fit_transform(x_train)
    x_test = std.transform(x_test)

    # 邏輯回歸預(yù)測(cè)
    lg = LogisticRegression(C=1.0)

    lg.fit(x_train, y_train)

    print(lg.coef_)

    y_predict = lg.predict(x_test)

    print("準(zhǔn)確率:", lg.score(x_test, y_test))

    print("召回率:", classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "惡性"]))

    return None


if __name__ == "__main__":
    logistic()

運(yùn)行結(jié)果

     Sample code number  Clump Thickness  ...  Mitoses  Class
0               1000025                5  ...        1      2
1               1002945                5  ...        1      2
2               1015425                3  ...        1      2
3               1016277                6  ...        1      2
4               1017023                4  ...        1      2
..                  ...              ...  ...      ...    ...
694              776715                3  ...        1      2
695              841769                2  ...        1      2
696              888820                5  ...        2      4
697              897471                4  ...        1      4
698              897471                4  ...        1      4

[699 rows x 11 columns]
[[1.30052154 0.14422948 0.87413413 1.00049744 0.13566855 1.20200872
  0.95905237 0.61479529 0.74051181]]
準(zhǔn)確率: 0.9766081871345029
召回率:               precision    recall  f1-score   support

          良性       0.98      0.98      0.98       123
          惡性       0.96      0.96      0.96        48

    accuracy                           0.98       171
   macro avg       0.97      0.97      0.97       171
weighted avg       0.98      0.98      0.98       171

LogisticRegression總結(jié)

應(yīng)用:廣告點(diǎn)擊率預(yù)測(cè)塞琼、電商購(gòu)物搭配推薦

優(yōu)點(diǎn):適合需要得到一個(gè)分類(lèi)概率的場(chǎng)景

缺點(diǎn):當(dāng)特征空間很大時(shí)菠净,邏輯回歸的性能不是很好(看硬件能力)

生成模型和判別模型

先驗(yàn)概率:從歷史的數(shù)據(jù)中總結(jié)出概率信息。

需要進(jìn)行先驗(yàn)概率的模型就是生成模型彪杉。

判別模型:k-近鄰毅往,決策樹(shù),隨機(jī)森林派近,神經(jīng)網(wǎng)絡(luò)

生成模型:樸素貝葉斯攀唯,隱馬爾可夫模型

邏輯回歸 樸素貝葉斯
解決問(wèn)題 二分類(lèi) 多分類(lèi)
應(yīng)用場(chǎng)景 二分類(lèi)需要概率的問(wèn)題 文本分類(lèi)
參數(shù) 正則化力度 沒(méi)有

得出的結(jié)果都有概率解釋

非監(jiān)督學(xué)習(xí)

“物以類(lèi)聚,人以群分”
  1. 隨機(jī)在數(shù)據(jù)當(dāng)中抽取三個(gè)樣本构哺,當(dāng)作三個(gè)類(lèi)別的中心點(diǎn)(k1, k2, k3)
  1. 計(jì)算其余的點(diǎn)分別到這三個(gè)中心店的距離革答,每一個(gè)樣本有三個(gè)距離(a, b, c),從中選出距離最近的一個(gè)點(diǎn)作為自己的標(biāo)記形成三個(gè)族群曙强。
  1. 分別計(jì)算這三個(gè)族群的平均值残拐,把三個(gè)平均值與之前的三個(gè)舊中心點(diǎn)進(jìn)行比較,如果相同:結(jié)束聚類(lèi)碟嘴。如果不相同:把這三個(gè)平均值當(dāng)作新的中心點(diǎn)溪食,重復(fù)第二步。

k-means步驟

  1. 隨機(jī)設(shè)置K個(gè)特征空間內(nèi)的點(diǎn)作為初始的聚類(lèi)中心
  2. 對(duì)于其他每個(gè)點(diǎn)計(jì)算到K個(gè)中心的距離娜扇,未知的點(diǎn)選擇最近的一個(gè)聚類(lèi)中心點(diǎn)作為標(biāo)記類(lèi)別
  3. 接著對(duì)著標(biāo)記的聚類(lèi)中心之后错沃,重新計(jì)算出每個(gè)聚類(lèi)的新中心點(diǎn)(平均值)
  4. 如果計(jì)算得出的新中心點(diǎn)與原中心點(diǎn)一樣,那么結(jié)束雀瓢,否則重新進(jìn)行第二步過(guò)程

k-means API

sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’)

  • k-means聚類(lèi)
  • n_clusters:開(kāi)始的聚類(lèi)中心數(shù)量
  • init:初始化方法枢析,默認(rèn)為'k-means ++’
  • labels_:默認(rèn)標(biāo)記的類(lèi)型,可以和真實(shí)值比較(不是值比較)

k-means對(duì)Instacart Market用戶(hù)聚類(lèi)

  1. 降維之后的數(shù)據(jù)
  2. k-means聚類(lèi)
  3. 聚類(lèi)結(jié)果顯示
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score

# 讀取四張表的數(shù)據(jù)
prior = pd.read_csv("./data/instacart/order_products__prior.csv")
products = pd.read_csv("./data/instacart/products.csv")
orders = pd.read_csv("./data/instacart/orders.csv")
aisles = pd.read_csv("./data/instacart/aisles.csv")

# 合并四張表到一張表  (用戶(hù)-物品類(lèi)別)
_mg = pd.merge(prior, products, on=['product_id', 'product_id'])
_mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])

print(mt.head(10))

# 交叉表(特殊的分組工具)
cross = pd.crosstab(mt['user_id'], mt['aisle'])
print(cross.head(10))

# 進(jìn)行主成分分析
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross)

# 把樣本數(shù)量減少
x = data[:500]
print(x.shape)

# 假設(shè)用戶(hù)一共分為四個(gè)類(lèi)別
km = KMeans(n_clusters=4)
km.fit(x)

predict = km.predict(x)
print(predict)

# 顯示聚類(lèi)的結(jié)果
plt.figure(figsize=(10,10))

# 建立四個(gè)顏色的列表
colored = ['orange', 'green', 'blue', 'purple']
colr = [colored[i] for i in predict]
plt.scatter(x[:, 1], x[:, 20], color=colr)

plt.xlabel("1")
plt.ylabel("20")

plt.show()

# 評(píng)判聚類(lèi)效果刃麸,輪廓系數(shù)
print(silhouette_score(x, predict))

運(yùn)行結(jié)果

   order_id  product_id  ...  days_since_prior_order  aisle
0         2       33120  ...                     8.0   eggs
1        26       33120  ...                     7.0   eggs
2       120       33120  ...                    10.0   eggs
3       327       33120  ...                     8.0   eggs
4       390       33120  ...                     9.0   eggs
5       537       33120  ...                     3.0   eggs
6       582       33120  ...                    10.0   eggs
7       608       33120  ...                    12.0   eggs
8       623       33120  ...                     3.0   eggs
9       689       33120  ...                     3.0   eggs

[10 rows x 14 columns]
aisle    air fresheners candles  asian foods  ...  white wines  yogurt
user_id                                       ...                     
1                             0            0  ...            0       1
2                             0            3  ...            0      42
3                             0            0  ...            0       0
4                             0            0  ...            0       0
5                             0            2  ...            0       3
6                             0            0  ...            0       0
7                             0            0  ...            0       5
8                             0            1  ...            0       0
9                             0            0  ...            0      19
10                            0            1  ...            0       2

[10 rows x 134 columns]
(500, 27)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2
 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0
 2 0 0 0 0 0 0 0 0 0 0 2 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 0 2 0 0
 0 0 0 1 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 2 0 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0
 1 0 0 0 2 0 0 0 0 2 2 2 0 2 0 0 0 0 0 0 2 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2 2 0 0 0 0 0 0 0 3 2 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 0 0 0 2 0 1 0 0 0 2 0 0 0 0 0 0
 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 2 0 0 0 0
 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 3
 0 0 0 2 0 0 0 2 0 2 0 0 0 0 0 0 0 1 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
 0 0 0 0 2 2 0 0 0 0 0 0 0 0 2 0 0 0 0]
0.6123125240469242

Kmeans性能評(píng)估指標(biāo)

輪廓系數(shù):

計(jì)算公式:sc_i = \frac{b_i - a_i}{max(b_i, a_i)}
注:對(duì)于每個(gè)點(diǎn)i 為已聚類(lèi)數(shù)據(jù)中的樣本 醒叁,b_i 為i 到其它族群的所有樣本的平均距離,a_i 為i 到本身簇的距離平均值

最終計(jì)算出所有的樣本點(diǎn)的輪廓系數(shù)平均值

如果sc_i 小于0泊业,說(shuō)明a_i 的平均距離大于最近的其他簇把沼。聚類(lèi)效果不好

如果sc_i 越大,說(shuō)明a_i 的平均距離小于最近的其他簇吁伺。聚類(lèi)效果好

輪廓系數(shù)的值是介于 [-1,1] 饮睬,越趨近于1代表內(nèi)聚度和分離度都相對(duì)較優(yōu)

對(duì)于每一個(gè)樣本 這里以藍(lán)1為例

  1. 計(jì)算藍(lán)1到自身類(lèi)別的點(diǎn)距離的平均值a_i

  2. 計(jì)算藍(lán)1分別到紅色類(lèi)別,綠色類(lèi)別所有的點(diǎn)的距離篮奄,求出平均值b1, b2捆愁,取其中最小的值當(dāng)做b_i

  3. 用公式計(jì)算藍(lán)1的輪廓系數(shù)[-1, 1]

極端情況:

b_i>>a_i: 1 完美

a_i>> b_i: -1 最差

Kmeans性能評(píng)估指標(biāo)API

sklearn.metrics.silhouette_score(X, labels)

  • 計(jì)算所有樣本的平均輪廓系數(shù)
  • X:特征值
  • labels:被聚類(lèi)標(biāo)記的目標(biāo)值

特點(diǎn)分析:采用迭代式算法割去,直觀(guān)易懂并且非常實(shí)用

缺點(diǎn):容易收斂到局部最優(yōu)解(多次聚類(lèi))
需要預(yù)先設(shè)定簇的數(shù)量(k-means++解決)

"日出于東,落于西牙瓢。登高棄梯劫拗,未來(lái)可期。"
Macsen Chu

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矾克,一起剝皮案震驚了整個(gè)濱河市页慷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胁附,老刑警劉巖酒繁,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異控妻,居然都是意外死亡州袒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)弓候,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)郎哭,“玉大人,你說(shuō)我怎么就攤上這事菇存】溲校” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵依鸥,是天一觀(guān)的道長(zhǎng)亥至。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贱迟,這世上最難降的妖魔是什么姐扮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮衣吠,結(jié)果婚禮上茶敏,老公的妹妹穿的比我還像新娘。我一直安慰自己缚俏,他們只是感情好睡榆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著袍榆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪塘揣。 梳的紋絲不亂的頭發(fā)上包雀,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音亲铡,去河邊找鬼才写。 笑死葡兑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赞草。 我是一名探鬼主播讹堤,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼厨疙!你這毒婦竟也來(lái)了洲守?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沾凄,失蹤者是張志新(化名)和其女友劉穎梗醇,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體撒蟀,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叙谨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了保屯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片手负。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖姑尺,靈堂內(nèi)的尸體忽然破棺而出竟终,到底是詐尸還是另有隱情,我是刑警寧澤股缸,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布衡楞,位于F島的核電站,受9級(jí)特大地震影響敦姻,放射性物質(zhì)發(fā)生泄漏瘾境。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一镰惦、第九天 我趴在偏房一處隱蔽的房頂上張望迷守。 院中可真熱鬧,春花似錦旺入、人聲如沸兑凿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)礼华。三九已至,卻和暖如春拗秘,著一層夾襖步出監(jiān)牢的瞬間圣絮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工雕旨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扮匠,地道東北人捧请。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像棒搜,于是被迫代替她去往敵國(guó)和親疹蛉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容