03_機器學習面試題

在這裏插入圖片描述

博文配套視頻課程:Python面試題與面試技巧


One-Hot編碼與預處理

在機器學習算法中,我們經常會遇到分類特徵,例如:人的性別有男女,祖國有中國,美國,法國等。這些特徵值並不是連續的,而是離散的,無序的。通常我們需要對其進行特徵數字化,One-Hot編碼,又稱爲一位有效編碼,主要是採用N位狀態寄存器來對N個狀態進行編碼,每個狀態都由他獨立的寄存器位,並且在任意時候只有一位有效

from sklearn.preprocessing import OneHotEncoder

enc = OneHotEncoder()
#  說所有的樣本加起來必須保證所有列的特徵值都要遍歷到
result = enc.fit_transform([['男', '中國', '足球'],
                            ['女', '美國', '籃球'],
                            ['男', '日本', '羽毛球'],
                            ['女', '中國', '乒乓球']])
print(result)
print(enc.get_feature_names())
print(result.toarray())
print(enc.inverse_transform(result))
# 這裏使用一個新的數據來測試
array = enc.transform([['男', '美國', '乒乓球']]).toarray()
print(array)

train_test_split各參數解釋

import numpy as np
from sklearn.model_selection import train_test_split

# X: 所要劃分的樣本特徵集
# y: 所要劃分的樣本結果
# test_size: 樣本佔比,如果是整數的話就是樣本的數量
# random_state: 是隨機數的種子,在需要重複試驗的時候,保證得到一組一樣的隨機數,不填每次都不一樣

X = np.arange(20)  # y = 12 : 8
y = ['A', 'B', 'A', 'A', 'A', 'B', 'A', 'B', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'A', 'B', 'A', 'A']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=1)
print(X_test, y_test)

# stratify: 可以爲類似數組或None
    # 1: 若爲None時,劃分出來的測試集或訓練集中,其類標籤的比例也是隨機的
    # 2: 劃分出來的測試集或訓練集中,其類標籤的比例同輸入的數組中類標籤的比例相同
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=1,stratify=y)
print(X_test, y_test)

MAE、MSE、RMSE的區別和實現原理

在這裏插入圖片描述

y_predict = np.array([1,2,3,4])
# 均方誤差時測試 1,2,3,12
y_true = np.array([3,4,5,6])
mae = np.average(np.abs(y_predict-y_true))
print('絕對值誤差',mae)
mae = np.sum(np.abs(y_predict-y_true))/len(y_predict)
print('絕對值誤差',mae)
from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error(y_true,y_predict)
# print('絕對值誤差',mae)
# 均方誤差, 測試會發現,如果誤差值均衡,絕對值誤差與均方誤差幾乎是相等的
mse = np.average((y_predict-y_true)**2)
print('均方根誤差RMSE',np.sqrt(mse))
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_predict,y_true)
print('均方根誤差',np.sqrt(mse))

上面三個模型解決了樣本數量 m 和 量綱的影響。但是它們都存在一個相同的問題:當量綱不同時,難以衡量模型效果好壞。舉個例子,模型在一份房價數據集上預測得到的誤差 RMSE 是 5 萬元, 在另一份學生成績數據集上得到誤差是 10 分。憑這兩個值,很難知道模型到底在哪個數據集上效果好。


R2 公式推導

在這裏插入圖片描述

from sklearn.metrics import r2_score

y_true = np.array([3,5,7,9])
y_predict = np.array([4,5,9,11])
# lr.socre() 函數調用了 r2_score
print(r2_score(y_true, y_predict))
print(1 - np.sum((y_predict - y_true)**2) / np.sum((y_true.mean() - y_true)**2))
  1. 由於右邊的分數的分子與分母都是平方,因此R2 <=1
  2. 當我們不犯任何錯誤時,分子爲0,R2得到的最大值爲1
  3. 當我們的模型等於基準模型時,整個分數爲1,這時R2爲0
  4. 如果R2<0,說明我們學習到的模型還不如基準模型,此時,很有可能我們的數據不存在任何線性關係

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章