日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3(六)监督学习

發(fā)布時間:2023/12/15 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3(六)监督学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

監(jiān)督學習

目錄

  • 1 監(jiān)督學習
  • 2 分類
    • 2.1 人體運動信息評級實例
    • 2.2 基本分類模型
    • 2.3 運動狀態(tài)程序
  • 3 回歸
    • 3.1 線性回歸

?

正文

回到頂部

1 監(jiān)督學習

  利用一組帶標簽的數(shù)據(jù), 學習從輸入到輸出的映射, 然后將這種映射關系應用到未知數(shù)據(jù), 達到分類或者回歸的目的

  (1) 分類: 當輸出是離散的, 學習任務為分類任務

    

    輸入: 一組有標簽的訓練數(shù)據(jù)(也叫觀察和評估), 標簽表明了這些數(shù)據(jù)(觀察)的所屬類別, 圖中”貓”和”狗”就是標簽

    輸出: 分類模型根據(jù)這些訓練數(shù)據(jù), 訓練自己的模型參數(shù), 學習出一個適合這組數(shù)據(jù)的分類器, 當有新數(shù)據(jù)(非訓練數(shù)據(jù))需要進行類別判斷, 就可以將這組數(shù)據(jù)作為輸入送給學習好的分類器進行判斷(得到標簽)

    訓練集: 訓練模型已經標注的數(shù)據(jù), 用來建立模型發(fā)現(xiàn)規(guī)律

    測試集: 已標注的數(shù)據(jù), 只不過把標注隱藏了, 再送給訓練好的模型, 比對結果與原來的標注, 評判該模型的學習能力  

    一般來說, 獲得了一組標注好的數(shù)據(jù), 70%當做訓練集, 30%當做測試集, 另外還有交叉驗證法, 自助法來評估學習模型

    評價標準

      1) 準確率

        所有預測對的

        把正類預測成正類(TP)

        把負類預測成負類(TN)

        準確率 = (TP+TN)/總數(shù)量

      2) 精確率

        以二分類為例

        預測為正的樣本是真的正樣本

        把正類預測為正類(TP)

        把負類預測為正類(FP)

        

      3) 召回率

        樣本中的正比例有多少被預測正確

        把正類預測成正類(TP)

        把正類預測成負類(FN)

        

    sklearn提供的分類函數(shù)有:

      K近鄰(knn), 樸素貝葉斯(naivebayes), 支持向量機(svm), 決策樹(decision tree), 神經網絡模型(Neural networks)

  (2) 回歸: 當輸出是連續(xù)的, 學習任務是回歸任務

    通過回歸, 可以了解兩個或多個變數(shù)是否相關, 方向及其強度, 可以建立數(shù)學模型來觀察特定變數(shù)以及預測特定的變數(shù)

    回歸可以根據(jù)給出的自變量估計因變量的條件期望

    

    sklearn提供的回歸函數(shù)放在了兩個子模塊

      sklearn.linear_model, 線性函數(shù): 普通線性回歸函數(shù)(LinearRegression), 嶺回歸(Ridge), Lasso

      sklearn.preprocessing, 非線性回歸: 多項式回歸(PolynomialFeatures)

    回歸應用

      對一些帶有時序信息的數(shù)據(jù)進行預測或者趨勢擬合, 在金融以及其他涉及時間序列分析的領域

      股票趨勢預測

      交通流量預測

回到頂部

2 分類

2.1 人體運動信息評級實例

  可穿戴設備可以獲取人體各項數(shù)據(jù), 通過這些數(shù)據(jù)可以進行分析和建模, 可以對用戶狀況進行判斷

  在數(shù)據(jù)源中有一個特征文件*.feature, 一個標簽文件*.label

  特征文件包含41列特征 

  

  

  溫度: 靜止時人體一般維持在36.5度上下, 當溫度高于37度時, 可能是進行短時間的劇烈運動

  ?一型/二型三軸加速區(qū): 這是兩個型號的加速度傳感器, 兩個加速度傳感器可以相互印證來保證數(shù)據(jù)的完整性準確性, 獲得的數(shù)據(jù)是在x,y,z三個軸上的加速度, 如z軸上加速度劇增, 很有可能就是人體向上跳

  陀螺儀: 獲得用戶當前身體的角度, 可以判斷姿態(tài)

  磁場: 檢測用戶周圍磁場強度和數(shù)值大小, 可以幫助我們理解用戶所在的環(huán)境, 一般地, 人在一個辦公場所, 用戶座位的周圍的磁場大體上是固定的, 因此當磁場發(fā)生改變時, 可以推測用戶的位置和場景發(fā)生了變化

  標簽文件對應于特征文件的每一行, 總共有25中姿態(tài)

2.2 基本分類模型

  (1) k近鄰分類器(KNN)

    原有已經分類好的點, 現(xiàn)加入新的點, 判斷其類別就是查看所有點與它的距離, 取前K個, 這K個點哪一部分的的點的數(shù)量多, 這個新加入的點就屬于哪一部分

    

    創(chuàng)建knn分類器

      sklearn.neighbors.KNeighborsClassifier()

      n_neighbors: 用于指定分類器中K的大小, 默認為5

      weights: 設置K個點對分類結果影響的權重, 默認平均權重uniform, 距離權重(越近權重越高)distance, 或者是自定義計算函數(shù)

      algorithm: 尋找臨近點的方法, 默認為auto(根據(jù)數(shù)據(jù)自動選擇), ball_tree, kd_tree, brute等

    使用kkn

X = [[0],[1],[2],[3]] y = [0,0,1,1] from sklearn.neighbors import KNeighborsClassifier neight = KNeighborsClassifier(n_neighbors=3) neight.fit(X,y) Out[5]: KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',metric_params=None, n_jobs=1, n_neighbors=3, p=2,weights='uniform')neight.predict([[1.1]]) Out[6]: array([0])

?

      其中X是數(shù)據(jù), y是標簽, 使用predict()來預測新的點, 檢查前3個點, 應該是[1],[2],[0]主要是標簽0的數(shù)據(jù)點, 因此[1.1]被劃分到標簽0中    

    關于k的選取

      較大的k值, 由于鄰域較大, 有可能和他就近的分類點不多, 所以可能結果出錯

      較小的k值, 鄰域較小, 有可能鄰居是噪聲點, 導致過擬合

      一般來說, 選擇較小的k, 然后使用交叉驗證選取最優(yōu)的k值

  (2) 決策樹

    一般是詢問分類點的屬性決定走向的分支, 不斷查詢獲得最終的分類

    無房產單身年收入55k的決策效果

    

    創(chuàng)建決策樹

      sklearn.tree.DecisionTree.Classifier()

      criterion: 選擇屬性的準則, gini(基尼系數(shù)), entropy(信息增益)

      max_features: 從多少個特征中選擇最優(yōu)特征, 默認是所有特征個數(shù), 還可以是固定數(shù)目, 百分比等

    決策樹的使用

from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import cross_val_score clf = DecisionTreeClassifier() iris = load_iris() cross_val_score(clf, iris.data, iris.target, cv=10) Out[12]: array([ 1. , 0.93333333, 1. , 0.93333333, 0.93333333,0.86666667, 0.93333333, 1. , 1. , 1. ])

      cross_val_score是一個計算交叉驗證值的函數(shù)

      iris.data作為數(shù)據(jù)集, iris.target作為目標結果

      cv=10表示使用10折交叉驗證

      同樣可以使用 clf.fit(X,y)來生成, clsf.predict(x)進行函數(shù)預測

  (3) 樸素貝葉斯

    樸素貝葉斯是以貝葉斯定理為基礎的多分類的分類器

    

    sklearn實現(xiàn)了三個樸素貝葉斯分類器

    

    區(qū)別在于假設某一特征的所有屬于某個類別的觀測值符合特定分布, 分類問題的特征包括人的身高, 身高符合高斯分布, 這類問題適合高斯樸素貝葉斯?  

?    創(chuàng)建樸素貝葉斯

      sklearn.naive_bayes.GaussianNB()

      priors:?給定各個類別的先驗概率, 空(按訓練數(shù)據(jù)的實際情況進行統(tǒng)計), 給定先驗概率(訓練過程不能更改)

    樸素貝葉斯的使用

import numpy as np X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]]) Y = np.array([1,1,1,2,2,2]) from sklearn.naive_bayes import GaussianNB clf = GaussianNB(priors=None) clf.fit(X,Y) Out[18]: GaussianNB(priors=None)clf.predict([[-0.8,-1]]) Out[19]: array([1])

    樸素貝葉斯是典型的生成學習方法, 由訓練數(shù)據(jù)學習聯(lián)合概率分布, 并求得后驗概率分布

    樸素貝葉斯一般在小規(guī)模數(shù)據(jù)上的表現(xiàn)很好, 適合進行多分類任務

2.3 運動狀態(tài)程序

  程序流程:

    從特征文件和標簽文件中將所有的數(shù)據(jù)加載到內存中, 并對缺失值進行簡單的數(shù)據(jù)預處理

    創(chuàng)建分類器, 使用訓練集進行訓練

    測試集預測, 通過計算模型整體的準確率和召回率, 評估模型

    

  1) 模塊的導入

?
12345678910import pandas as pdimport numpy as np? ??from sklearn.preprocessing import Imputerfrom sklearn.cross_validation import train_test_split from sklearn.metrics import classification_report????from sklearn.neighbors import KNeighborsClassifierfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.naive_bayes import GaussianNB

  導入numpy庫和pandas庫

  從sklearn庫中導入預處理模塊Imputer

  導入自動生成訓練集和測試集的模塊train_test_split

  導入預測結果評估模塊classification_report

  再導入三個算法: K近鄰分類器KNeighborsClassifier, 決策樹分類器DecisionTreeClassifier和高斯樸素貝葉斯函數(shù)GaussianNB

  2) 數(shù)據(jù)導入函數(shù)

?
12345678910111213141516def load_datasets(feature_paths, label_paths):????feature = np.ndarray(shape=(0,41))????label = np.ndarray(shape=(0,1))????for file in feature_paths:????????df = pd.read_table(file, delimiter=',', na_values='?', header=None)????????imp = Imputer(missing_values='NaN', strategy='mean', axis=0)????????imp.fit(df)????????df = imp.transform(df)????????feature = np.concatenate((feature, df))??????????for file in label_paths:????????df = pd.read_table(file, header=None)????????label = np.concatenate((label, df))??????????????label = np.ravel(label)????return feature, label

  編寫數(shù)據(jù)導入函數(shù),設置傳入兩個參數(shù),分別是特征文件的列表feature_paths和標簽文件的列表label_paths。

  定義feature數(shù)組變量,列數(shù)量和特征維度一致為41;定義空的標簽變量,列數(shù)量與標簽維度一致為1。

  使用pandas庫的read_table函數(shù)讀取一個特征文件的內容,其中指定分隔符為逗號、缺失值為問號且文件不包含表頭行。

  使用Imputer函數(shù),通過設定strategy參數(shù)為‘ mean’,使用平均值對缺失數(shù)據(jù)進行補全。 fit()函數(shù)用于訓練預處理器,transform()函數(shù)用于生成預處理結果。

  將預處理后的數(shù)據(jù)加入feature,依次遍歷完所有特征文件

  遵循與處理特征文件相同的思想,我們首先使用pandas庫的read_table函數(shù)讀取一個標簽文件的內容,其中指定分隔符為逗號且文件不包含表頭行。

  由于標簽文件沒有缺失值,所以直接將讀取到的新數(shù)據(jù)加入label集合,依次遍歷完所有標簽文件,得到標簽集合label。

  最后函數(shù)將特征集合feature與標簽集合label返回。

  3) 主函數(shù)的編寫

?
123456789101112131415161718192021222324252627282930313233if __name__ == '__main__':????''' 數(shù)據(jù)路徑 '''????featurePaths = ['A/A.feature','B/B.feature','C/C.feature','D/D.feature','E/E.feature']????labelPaths = ['A/A.label','B/B.label','C/C.label','D/D.label','E/E.label']????''' 讀入數(shù)據(jù)? '''????x_train,y_train = load_datasets(featurePaths[:4],labelPaths[:4])????x_test,y_test = load_datasets(featurePaths[4:],labelPaths[4:])????x_train, x_, y_train, y_ = train_test_split(x_train, y_train, test_size = 0.0)??????????print('Start training knn')????knn = KNeighborsClassifier().fit(x_train, y_train)????print('Training done')????answer_knn = knn.predict(x_test)????print('Prediction done')??????????print('Start training DT')????dt = DecisionTreeClassifier().fit(x_train, y_train)????print('Training done')????answer_dt = dt.predict(x_test)????print('Prediction done')??????????print('Start training Bayes')????gnb = GaussianNB().fit(x_train, y_train)????print('Training done')????answer_gnb = gnb.predict(x_test)????print('Prediction done')??????????print('\n\nThe classification report for knn:')????print(classification_report(y_test, answer_knn))????print('\n\nThe classification report for DT:')????print(classification_report(y_test, answer_dt))????print('\n\nThe classification report for Bayes:')????print(classification_report(y_test, answer_gnb))

  設置數(shù)據(jù)路徑feature_paths和label_paths。

  使用python的分片方法,將數(shù)據(jù)路徑中的前4個值作為訓練集,并作為參數(shù)傳入load_dataset()函數(shù)中,得到訓練集合的特征x_train,訓練集的標簽y_train。

  將最后一個值對應的數(shù)據(jù)作為測試集,送入load_dataset()函數(shù)中,得到測試集合的特征x_test,測試集的標簽y_test。

  使用train_test_split()函數(shù),通過設置測試集比例test_size為0,將數(shù)據(jù)隨機打亂,便于后續(xù)分類器的初始化和訓練。

  使用默認參數(shù)創(chuàng)建K近鄰分類器,并將訓練集x_train和y_train送入fit()函數(shù)進行訓練,訓練后的分類器保存到變量knn中。

  使用測試集x_test,進行分類器預測,得到分類結果answer_knn。

  使用默認參數(shù)創(chuàng)建決策樹分類器dt,并將訓練集x_train和y_train送入fit()函數(shù)進行訓練。訓練后的分類器保存到變量dt中。

  使用測試集x_test,進行分類器預測,得到分類結果answer_dt。

  使用默認參數(shù)創(chuàng)建貝葉斯分類器,并將訓練集x_train和y_train送入fit()函數(shù)進行訓練。訓練后的分類器保存到變量gnb中。  

  使用測試集x_test,進行分類器預測,得到分類結果answer_gnb。

  使用classification_report函數(shù)對分類結果,從精確率precision、召回率recall、 f1值f1-score和支持度support四個維度進行衡量。

  分別對三個分類器的分類結果進行輸出

回到頂部

3 回歸


3.1 線性回歸

  線性回歸(Linear Regression)是利用數(shù)理統(tǒng)計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關系的一種統(tǒng)計分析方法。

  線性回歸利用稱為線性回歸方程的最小平方函數(shù)對一個或多個自變量和因變量之間關系進行建模。 這種函數(shù)是一個或多個稱為回歸系數(shù)的模型參數(shù)的線性組合。只有一個自變量的情況稱為簡單回歸,大于一個自變量情況的叫做多元回歸

總結

以上是生活随笔為你收集整理的python3(六)监督学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。