中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

機器學習(xi)入(ru)門:基礎(chu)知識與快速開始(shi)

之前系統學習了黃佳老師的《AI應用實戰課》,對機器學習有了一個大概的認知,意猶未盡感覺還想再了解了解,于是又學習了黃佳老師的《零基(ji)礎(chu)實戰機器學習》,基(ji)礎(chu)知識看這一(yi)篇(pian)就夠(gou)了。

機器學習到底是什么?

機器學習是利用計算機的運算能力,從大量的數據中發現一個“函數”或“模型”,并通過它來模擬現實世界事物之間的關系,從而實現預測、判斷等目的

這(zhe)個(ge)過(guo)程的(de)關(guan)鍵(jian)之(zhi)處(chu)就在于:建(jian)立一個(ge)合適的(de)模型,并能主動地根據這(zhe)個(ge)模型進行“推(tui)理(li)”,而(er)這(zhe)個(ge)建(jian)模的(de)過(guo)程就是(shi)機(ji)器的(de)“學(xue)習”過(guo)程。

機器學(xue)習和傳統程序有何差別?

傳統程(cheng)序是程(cheng)序員將已(yi)知(zhi)的規則定(ding)義好之(zhi)后(hou)輸入給(gei)機器(qi)的。

機器學(xue)習則是從(cong)已知數據中,通過不(bu)斷試錯、自我優化、自身總結(jie),歸納出來規則來。

從上圖可以看到,機器學習的本質特征是:從數據中發現規則

我們也可以這樣說:傳統程序是程序員定義好函數,而在機器學習中是機器訓練出函數我們學(xue)過(guo)中學(xue)數學(xue)應(ying)該都知(zhi)道,既然(ran)是函(han)數,那就有自變(bian)量(x)和因變(bian)量(y)。在機器學(xue)習中,自變(bian)量叫(jiao)做特(te)征(zheng)(feature),因變(bian)量叫(jiao)做標簽(qian)(label),而一(yi)批(pi)歷(li)史(shi)特(te)征(zheng)和一(yi)批(pi)歷(li)史(shi)標簽(qian)的集(ji)合,就是機器學(xue)習的數據(ju)集(ji)(dataset)。

數(shu)據(ju)集(ji)(ji)(ji)中,最初(chu)用來訓練的(de)數(shu)據(ju)集(ji)(ji)(ji),叫做(zuo)訓練集(ji)(ji)(ji)(training dataset)。而(er)當機器訓練出了(le)一(yi)個函數(shu),用來驗證和評估(gu)的(de)數(shu)據(ju)集(ji)(ji)(ji)呢,就(jiu)叫做(zuo)驗證數(shu)據(ju)集(ji)(ji)(ji)(validation dataset)或 測試數(shu)據(ju)集(ji)(ji)(ji)(test dataset)。

做機(ji)器學習(xi)項目,其(qi)實(shi)就(jiu)是(shi)選定一(yi)(yi)個(ge)算法(fa),然后用數據訓練機(ji)器,從而(er)找到一(yi)(yi)組(zu)函數中最適合的(de)那一(yi)(yi)個(ge),形成模型。

機器(qi)學(xue)習(xi)的三(san)種類型

根據機器(qi)學習是否有(you)標簽(qian),可以分(fen)為三種類型:

(1)監督學習(Supervised Learning):訓練數據集全部有標簽

(2)無監督學習(Unsupervised Learning):訓練數據集沒有標簽

(3)半監督學習(Semi-Supervised Learning):訓練(lian)數據集有(you)的有(you)標簽,有(you)的沒有(you)標簽監(jian)督學習目前,監督學習是應用最廣泛的機器學習算法

據標簽的(de)特點,監督學習可以分(fen)為兩大類(lei):回歸 和 分(fen)類(lei)。

(1)回歸問題回歸問題的標簽是連續的數值,比如預測房價、股市(shi)、天(tian)氣情況等(deng)等(deng)。

(2)分類問題分類問題的標簽是離散的數值,比如客戶風險識(shi)別、病(bing)人(ren)患病(bing)診(zhen)斷、人(ren)臉識(shi)別等等。

無監督學習(xi)和(he)半(ban)監督學習(xi)

無監督學習,是為沒有標簽的數據而建的模型,目前它大多應用在聚類和降維等有限的場景中,往往是作為數據預處理的一個子步驟而顯顯身手

半監督學習,是(shi)(shi)使用大量無標(biao)(biao)簽數據(ju)(ju)和一(yi)部分(fen)有標(biao)(biao)簽的數據(ju)(ju)進行建模,一(yi)般情況(kuang)下是(shi)(shi)因為這(zhe)類場(chang)景(jing)下獲取(qu)數據(ju)(ju)標(biao)(biao)簽的難度或成本很高(gao)。目前,半監督學習的落地應用還比較有限

強化學(xue)習(xi)和深度學(xue)習(xi)

強化學習(xi)研究(jiu)的目標是(shi):智能體(ti)(Agent)如何基(ji)于環境而做出行動反映,以取得最大化的累(lei)計獎勵。

NOTE:這里的智能體,我們暫且將其理解為一種機器學習模型即可。

強化學習和監督學習的差異在于:監督學習是從數據中學習,而強化學習則是從環境中給它的獎勵中學習。通過反復試錯、不斷(duan)調整,每個訓練周期后,它(ta)都變得比以前強一點(dian),最終億(yi)萬(wan)次訓練之后就非常(chang)強大了。

深度學(xue)(xue)(xue)習(xi)(xi)(xi)是(shi)一種使用深層(ceng)神經(jing)網(wang)絡算法的機器學(xue)(xue)(xue)習(xi)(xi)(xi)模型,它也是(shi)一種算法。它既可以(yi)應(ying)(ying)用在(zai)監督(du)學(xue)(xue)(xue)習(xi)(xi)(xi)、無監督(du)學(xue)(xue)(xue)習(xi)(xi)(xi)和半監督(du)學(xue)(xue)(xue)習(xi)(xi)(xi)中,也可以(yi)應(ying)(ying)用在(zai)強化學(xue)(xue)(xue)習(xi)(xi)(xi)中。

深度學習最厲害的地方在于:它可以對非結構化的數據集進行復雜特征的自動提取,完全不需要人為干預。那么,像(xiang)(xiang)圖形圖像(xiang)(xiang)、自(zi)然(ran)語(yu)言處理、語(yu)音識別(bie)和(he)視覺處理等問題,就是深度學習的常用場景。

機器(qi)學習(xi)的實戰5步

一個機器(qi)學習項目的實戰大概有5個步驟:

  • 定義問(wen)題
  • 收集數據和(he)預處理
  • 選擇算法(fa)和確定(ding)模型
  • 訓練擬合模型
  • 評估和優(you)化模型性能

第(di)一個機(ji)器學習項目

假設我(wo)們(men)在一個(ge)企業的新媒體運營部(bu),需要對公(gong)眾號(hao)推廣(guang)文案的運營效率進行分(fen)析,我(wo)們(men)收(shou)集了大量的軟文數據,包括點贊(zan)數、轉發數和瀏(liu)覽量等(deng)等(deng),如(ru)下圖所示(shi):

但是,當一個公眾號文章的閱讀量超過了10萬之后,就不會顯示它的具體閱讀量了。所以針對這個問題,我們的目標是:建立一個機器學習模型,能夠根據點贊數和轉發數等指標,估計一篇文章的大概閱讀量

這里(li),我(wo)們使用Python + scikit-learn框架(jia)來實現這個案例(li)。

(1)定義(yi)問(wen)題

因為要預估閱讀(du)量,在數據集中(zhong)的(de)(de)四個(ge)字段(duan)都是(shi)特征,而(er)標簽(qian)就(jiu)是(shi)閱讀(du)量。因此,可以看出,這是(shi)一(yi)個(ge)監督學習類(lei)型的(de)(de)回(hui)歸問(wen)題,因為它(ta)的(de)(de)標簽(qian)閱讀(du)量是(shi)一(yi)個(ge)連(lian)續的(de)(de)數值(zhi)。

(2)收集(ji)數(shu)據(ju)和預處(chu)理

在這個(ge)步驟(zou)中包含了一些子步驟(zou):數(shu)(shu)據(ju)可視化、數(shu)(shu)據(ju)清(qing)洗、特(te)征工程、構建特(te)征集(ji)(ji)和標簽(qian)集(ji)(ji)、拆分訓(xun)練集(ji)(ji)/驗證集(ji)(ji)和測試集(ji)(ji)。

給收集好的數(shu)據(基于csv文(wen)件(jian)的數(shu)據集)做(zuo)一(yi)下可視化:

import pandas as pd # 導入(ru)Pandas數(shu)據處理工具(ju)包
df_ads = pd.read_csv('wechat-articles-data.csv') # 讀(du)入數據
df_ads.head() # 顯(xian)示前幾行數據

#導入(ru)數據可視化(hua)所(suo)需要的庫
import matplotlib.pyplot as plt # Matplotlib – Python畫(hua)圖(tu)工具(ju)庫(ku)
import seaborn as sns # Seaborn – 統(tong)計學數據(ju)可視化工具庫
plt.plot(df_ads['點贊數'],df_ads['瀏覽(lan)量'],'r.', label='Training data') # 用matplotlib.pyplot的plot方法顯示散點圖
plt.xlabel('點(dian)贊(zan)數') # x軸Label
plt.ylabel('瀏覽量') # y軸Label
plt.legend() # 顯示(shi)圖例
plt.show() # 顯示繪圖(tu)結果!

繪圖結果如下:

可以看出,這些歷史數據基本上集中在一條線附近,它的標簽(閱讀量)和特征值(這里是點贊數)之間,貌似存在著一種線性關系

用一個(ge)線性(xing)函(han)數來(lai)表示這(zhe)個(ge)問題的(de)話,它應(ying)該是(shi):y=w1x1+w2x2+w3x3+w4x4+b

其(qi)中,y是標簽值即(ji)閱讀量,w1,w2,w3,w4是4個特征(zheng)值如點(dian)贊數、轉發量等(deng),b是一個偏置(zhi)(截距),這里我們暫且不對其(qi)深究。

與此同時(shi),我們(men)(men)還(huan)可以做(zuo)一些數據(ju)(ju)清洗的工(gong)作,因為數據(ju)(ju)越干(gan)凈,模型的效果也(ye)就越好。例如,我們(men)(men)可以處(chu)理一些缺失的數據(ju)(ju)、過濾(lv)掉(diao)重復的數據(ju)(ju)、過濾(lv)掉(diao)錯誤的數據(ju)(ju)(如商品的銷售金額(e)如果出現負值(zhi),百(bai)分比數據(ju)(ju)出現大(da)于1的值(zhi)等(deng)等(deng))。

下面的代碼展示了批量(liang)將(jiang)出現(xian)了NaN(Not a Number)的值(zhi)刪除掉:

df_ads = df_ads.dropna() # 把出現了NaN的數據行刪掉

隨后(hou),我(wo)們還可(ke)以做(zuo)特征工程(cheng),它可(ke)以有(you)效降低特征數(shu)據集的維(wei)度,從(cong)而使得(de)機(ji)器學習模型訓練的效率越(yue)高。

例如,我(wo)們可以使用BMI指數這(zhe)一個特(te)(te)征來替代(dai)原來的兩個特(te)(te)征-體重(zhong)和(he)身(shen)高(gao),進而降低特(te)(te)征維度。這(zhe)里的這(zhe)個案例相對(dui)簡單,無需做(zuo)特(te)(te)征工程(cheng)。

隨后,我(wo)們可以構建特征集(ji)和標簽集(ji),例如通過下面的代碼(ma)來構建:

X = df_ads.drop(['瀏(liu)覽(lan)量'],axis=1) # 特征(zheng)集,Drop掉標簽相(xiang)關字段
y = df_ads.瀏覽量 # 標簽集

最后,我們(men)還需(xu)要拆分訓練集、驗證集和測試集,例如我們(men)通過80/20的(de)比例來(lai)(lai)拆分,借助Scikit-Learn框架(jia)來(lai)(lai)實(shi)現:

#將數據集(ji)進行80%(訓練(lian)集(ji))和20%(驗證(zheng)集(ji))的分(fen)割(ge)
from sklearn.model_selection import train_test_split #導入(ru)train_test_split工具
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                   test_size=0.2, random_state=0)

至(zhi)此,數據預處(chu)理工作結束。

(3)選擇算(suan)法(fa)和確定(ding)模型

這(zhe)個案例是(shi)典(dian)型的(de)回(hui)歸(gui)問(wen)題分析,因為這(zhe)里(li)我們就(jiu)選擇線性(xing)(xing)回(hui)歸(gui)算法來進行建(jian)(jian)模(mo)。當(dang)然(ran),還是(shi)借助scikit-learn框架預置的(de)線性(xing)(xing)回(hui)歸(gui)算法通過(guo)下面簡單(dan)的(de)兩行代碼就(jiu)可以創建(jian)(jian)線性(xing)(xing)模(mo)型:

from sklearn.linear_model import LinearRegression # 導入線性回歸算法模型
linereg_model = LinearRegression() # 使用線性回歸算法創建模型

(4)訓練模型

所謂訓練模型就是使(shi)用訓練集中的特征變量和已(yi)知標簽,通過逐漸擬合函數,確定最(zui)優的參數,最(zui)后完成模型。

在scikit-learn框架中(zhong),只需(xu)要(yao)一個簡單的(de)fit方(fang)法(fa)即可實現:

linereg_model.fit(X_train, y_train) # 用(yong)訓(xun)練集數據,訓(xun)練機器,擬(ni)合函數,確(que)定(ding)內部(bu)參(can)數

在這(zhe)個過程里,fit方法的(de)核(he)心就(jiu)是減(jian)少(shao)損失,使函數(shu)對特(te)征到標(biao)簽的(de)模擬(ni)越(yue)(yue)來越(yue)(yue)貼切。

線性回歸中所謂的擬合,其關鍵環節是通過梯度下降,逐步優化模型參數,使訓練集誤差值達到最小

(5)模型(xing)評估和優化

完成模型的訓練之后,需要對其進行評估,可能還需要對其進行優化。在常用的機器學習庫如scikit-learn中都會提供常用的工具指標,比如R平方分(fen)數 或者 MSE 均方誤(wu)差(cha)指標,就可(ke)以用于評估回歸分(fen)析模型的(de)優劣。

對(dui)于這個(ge)案例,我(wo)們首先(xian)需要將在訓(xun)練集中(zhong)訓(xun)練好的(de)模型在測(ce)試集中(zhong)跑一下,看看預(yu)測(ce)結果(guo)差距有(you)多少:

y_pred = linereg_model.predict(X_test) #預測測試集的Y值

df_ads_pred = X_test.copy() # 測試集特征數據(ju)
df_ads_pred['瀏(liu)覽量真值'] = y_test # 測試集標簽真值(zhi)
df_ads_pred['瀏覽量(liang)預(yu)測值(zhi)'] = y_pred # 測(ce)(ce)試(shi)集標簽預(yu)測(ce)(ce)值
df_ads_pred #顯示數(shu)據

輸出結果(guo):

可以看出,閱(yue)讀量的預測值有些還是(shi)蠻接近的。

光靠眼睛看還是太累了,直(zhi)接通過(guo)scikit-learn的工具方法(fa)給出一(yi)個指標(biao)分數來評估吧:

print('當前模型的(de)4個特征(zheng)的(de)權(quan)重分(fen)別是: ', linereg_model.coef_)
print('當(dang)前(qian)模(mo)型的截(jie)距(偏置)是: ', linereg_model.intercept_)
print("線性回歸預測評分(fen):", linereg_model.score(X_test, y_test)) # 評估模型

輸出結果:

當前模型的4個特征的權重分別是:  [   48.08395224    34.73062229 29730.13312489  2949.62196343]
當(dang)前模(mo)型的(de)截距(偏置(zhi))是(shi):  -127493.90606857178
線性回歸(gui)預測評分: 0.7085754407718876

那么(me),結合之前的線性(xing)函數,我們就(jiu)似乎得到了它(ta):

y=48.08x1(點贊)+34.73x2(轉發)+29730.13x3(熱度)+2949.62x4(評級)?127493.91

最后,通過得到的R平方分數值0.708(0到1之間),也意味著它(ta)能達到一個還可以的預測準確度。

不過,如果模(mo)型的(de)預測評估(gu)不太理想,那我們則需要回到第3步,要么(me)重新選擇(ze)機器學習(xi)算法,要么(me)調整已選擇(ze)模(mo)型的(de)外部參(can)數(shu)重新訓練模(mo)型,這一些列(lie)步驟都(dou)是機器學習(xi)工程師(shi)的(de)家常便飯。

那么,如果經(jing)過一系列(lie)迭代(dai)之后,對于(yu)訓練的(de)模型(xing)覺得(de)很不錯(cuo)了(le),那么接下來(lai)你就可以(yi)把(ba)它(ta)部署上(shang)線(xian),而這個上(shang)線(xian)使(shi)用的(de)步驟則是(shi)MLOps/AIOps工程師的(de)主要職責(ze)。例(li)如,我(wo)們可以(yi)做(zuo)一個Web網站(zhan)系統,提(ti)供一個UI界面供用戶輸入對應的(de)特征值(zhi)即(ji)可調用訓練好的(de)模型(xing)進行預測值(zhi)的(de)預測,如下圖(tu)所(suo)示:

其(qi)背后的協作流程大致如下圖所(suo)示:

需要注意的是:當我們訓練好一個模型后,可以將其序列化為一個標準的字節流文件,以便于我們的Web系統可以方便的調用它。這里我們可以將之前訓練好的模型導出為一個model.pkl格式的字節流文件,然后將其放到Web系統的部署目錄下以便其進行反序列化加載使用。

下面是一個具體的調用模型(xing)進行預測的代碼(ma)示例:

import numpy as np #導入NumPy
from flask import Flask, request, render_template #導入Flask相關包(bao)
import pickle #導入模塊(kuai)序(xu)列化(hua)包(bao)

app = Flask(__name__) 
model = pickle.load(open('model.pkl', 'rb')) #反序列(lie)化模(mo)型

@app.route('/')
def home(): # 默認啟動頁面
    return render_template('index.html') # 啟動index.html

@app.route('/predict',methods=['POST'])
def predict(): # 啟動預測頁面(mian)
    features = [int(x) for x in request.form.values()] # 輸入特征
    label = [np.array(features)] # 標簽
    prediction = model.predict(label) # 預測結果

    output = round(prediction[0], 2) #輸出預(yu)測結果

    return render_template('index.html', #預測瀏(liu)覽(lan)量
              prediction_text='瀏覽量 $ {}'.format(output)

if __name__ == "__main__": # 啟動程序
    app.run(debug=True)

怎么樣,上線(xian)系統使用機(ji)器學習模(mo)型是不(bu)是很簡(jian)單!

總結

本(ben)文介紹了(le)機(ji)器(qi)學習(xi)的(de)基本(ben)概念,通過(guo)一個(ge)預測公(gong)眾號文章閱讀量的(de)案例介紹了(le)如何(he)進行一個(ge)機(ji)器(qi)學習(xi)的(de)實戰(zhan)步驟,最后(hou)介紹了(le)將訓練好的(de)機(ji)器(qi)學習(xi)模型與線上(shang)系統集(ji)成起來上(shang)線使用。

相信通過這些快速開始的(de)內容,你一定能(neng)對機器學習(xi)的(de)項目有(you)個初步的(de)了解!

最后,推薦大家學習黃佳老師的課程《零基礎實戰機器學習,你一定能學到更(geng)多!

參考內容

黃佳(jia) 《零基礎(chu)實(shi)戰(zhan)機器學習(xi)》

 

posted @ 2025-06-20 19:30  EdisonZhou  閱讀(463)  評論(0)    收藏  舉報