Python人工智能高級71(線性迴歸,嶺迴歸,邏輯迴歸)

1、機器學習算法怎麼從數據中學習規律

        線性迴歸:h(\omega )=\omega_{1}x_{1}+\omega_{2}x_{2}+\cdots +\omega_{n}x_{n}\omegab稱之爲可訓練參數;

        算法學習:找到最優的可訓練參數;

        構造損失函數:g=f(\omega ,b)。函數值越小,模型的預測值與真實值越接近,求g最小的時候\omegab的值。

2、線性迴歸api

from sklearn.linear_model import LinearRegression

# 獲取數據
x = [[80, 86],
[82, 80],
[85, 78],
[90, 90],
[86, 82],
[82, 90],
[78, 80],
[92, 94]]
y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]
# 機器學習
estimator = LinearRegression()
estimator.fit(x,y)
# 獲取迴歸係數
estimator.coef_
# 獲取偏置
estimator.intercept_

 3、波士頓房價預測

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

# 正規方程優化    
# 1、獲取數據
data = load_boston()
# 2、數據基本處理 劃分數據集
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=10)
# 3、特徵工程 標準化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、機器學習 正規方程
# 4.1 創建模型 實例化估計器
estimator = LinearRegression()
# 4.2 訓練模型
estimator.fit(x_train, y_train)
# 5、模型評估 MSE 均方誤差 預測值和真實值
# 5.1 獲取預測值
y_predict = estimator.predict(x_test)
# 5.2 計算MSE
mean_squared_error(y_pred=y_predict, y_true=y_test)

# 梯度下降優化
# 1、獲取數據
data = load_boston()
# 2、數據基本處理 劃分數據集
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=10)
# 3、特徵工程 標準化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、機器學習 正規方程
# 4.1 創建模型 實例化估計器
estimator = SGDRegressor(max_iter=10000, tol=0.000001)
# 4.2 訓練模型
estimator.fit(x_train, y_train)
# 5、模型評估 MSE 均方誤差 預測值和真實值
# 5.1 獲取預測值
y_predict = estimator.predict(x_test)
# 5.2 計算MSE
mean_squared_error(y_pred=y_predict, y_true=y_test)

4、正則化

Ridge嶺迴歸代價函數:

       J(\theta )=MSE(\theta )+\alpha \sum_{i+1}^{n}\theta _{i}^{2}

Lasso嶺迴歸代價函數:

       J(\theta )=MSE(\theta )+\alpha \sum_{i+1}^{n}|\theta _{i}|

L2正則化:

       使得其中一些w的值都很小,都接近於0,削弱某個特徵的影響,Ridge迴歸。

L1正則化:

       使得其中一些w的值直接爲0,刪除這個特徵的影響,LASSO迴歸。

目標函數:

       目標函數=損失函數+正則項

Ridge嶺迴歸代碼實現:

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

# 1、獲取數據
data = load_boston()
# 2、數據基本處理 劃分數據集
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=10)
# 3、特徵工程 標準化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、機器學習 正規方程
# 4.1 創建模型 實例化估計器
estimator = Ridge(alpha=1.0)
# 4.2 訓練模型
estimator.fit(x_train, y_train)
# 5、模型評估 MSE 均方誤差 預測值和真實值
# 5.1 獲取預測值
y_predict = estimator.predict(x_test)
# 5.2 計算MSE
mean_squared_error(y_pred=y_predict, y_true=y_test)

5、模型的保存和加載

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

# 1、獲取數據
data = load_boston()
# 2、數據基本處理 劃分數據集
x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=10)
# 3、特徵工程 標準化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、機器學習 正規方程
# 4.1 創建模型 實例化估計器
# estimator = Ridge(alpha=1.0)
# 4.2 訓練模型
# estimator.fit(x_train, y_train)
# 保存模型
# joblib.dump(estimator, './1217.pkl')
# 加載模型
estimator=joblib.load('./1217.pkl')
# 5、模型評估 MSE 均方誤差 預測值和真實值
# 5.1 獲取預測值
y_predict = estimator.predict(x_test)
# 5.2 計算MSE
mean_squared_error(y_pred=y_predict, y_true=y_test)

 6、邏輯迴歸

線性迴歸輸入:

       h(\omega )=\omega_{1}x_{1}+\omega_{2}x_{2}+\cdots +\omega_{n}x_{n}

sigmoid激活函數:

       S(x)=\frac{1}{1+e^{-x}}

       線性迴歸的結果輸入到sigmoid函數當中,輸出結果爲[0, 1]區間中的一個概率值,默認爲0.5爲閾值

對數似然損失:

       cost(h_{\theta}(x),y)=\sum_{i=1}^{m}-y_{i}log(h_{\theta }(x))-(1-y_{i})log(1-h_{\theta}(x))

7、癌症分類預測

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

# 1.獲取數據 在線下載
names = ['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']
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",
                  names=names)
# 2.數據基本處理 
# 缺失值處理('?'標記)
data = data.replace(to_replace='?', value=np.NaN)
data = data.dropna()
# 劃分數據集
x = data.iloc[:, 1:10] # 特徵值
y = data['Class']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
# 3.特徵工程 標準化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4.機器學習 邏輯迴歸建模
# 4.1 建立模型
estimator = LogisticRegression()
# 4.2 訓練模型
estimator.fit(x_train, y_train)
# 5.模型評估
estimator.score(x_test, y_test)

# 分類評估報告
# 獲取預測值
y_predict = estimator.predict(x_test)
# 獲取分類評估報告
res = classification_report(y_true=y_test, y_pred=y_predict, labels=[2,4], target_names=['良性', '惡性'])
print(res)

8、ROC曲線與AUC指標

TPR:

       TPR = TP / (TP + FN),所有真實類別爲1的樣本中,預測類別爲1的比例

FPR:

       FPR = FP / (FP + TN),所有真實類別爲0的樣本中,預測類別爲1的比例

ROC曲線:

       ROC曲線的橫軸就是FPRate,縱軸就是TPRate,當二者相等時,表示的意義則是:對於不論真實類別是1還是0的樣本,分類器預測爲1的概率是相等的,此時AUC爲0.5。

AUC指標:

       AUC的概率意義是隨機取一對正負樣本,正樣本得分大於負樣本的概率;

       AUC的最小值爲0.5,最大值爲1,取值越高越好;

       AUC=1,完美分類器,採用這個預測模型時,不管設定什麼閾值都能得出完美預測。絕大多數預測的場合,不存在完美分類器;

       0.5<AUC<1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。

 

發佈了48 篇原創文章 · 獲贊 70 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章