黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

基于sklearn的線(xiàn)性分類(lèi)器logistics(對(duì)數(shù)幾率回歸)Python

系統(tǒng) 2265 0

基于sklearn的線(xiàn)性分類(lèi)器logistics(對(duì)數(shù)幾率回歸)Python實(shí)現(xiàn)

聲明 :本人小白,文章作為自己的學(xué)習(xí)參考資料,供大家學(xué)習(xí)交流
本文章 refer to

作者:月見(jiàn)樽 鏈接:https://www.jianshu.com/p/f9cb59dc99ec 來(lái)源:簡(jiǎn)書(shū)
作者: 周志華 書(shū)名:《機(jī)器學(xué)習(xí)》 出版社:清華大學(xué)出版社

感謝此文章及書(shū)籍原創(chuàng)者
如有侵犯您的知識(shí)產(chǎn)權(quán)和版權(quán)問(wèn)題,請(qǐng)通知本人,本人會(huì)即時(shí)做出處理并刪除文章

Email:louhergetup@gmail.com

理論部分

線(xiàn)性分類(lèi)器

特征與分類(lèi)結(jié)果存在線(xiàn)性關(guān)系的模型為線(xiàn)性分類(lèi)器,模型通過(guò)累積特征和對(duì)應(yīng)權(quán)值的方式?jīng)Q策,幾何學(xué)上可看成一個(gè)n維空間中的超平面,學(xué)習(xí)的過(guò)程就是不斷調(diào)整超平面的位置與傾斜程度,使該超平面可以最完美的將屬于不同類(lèi)別的特征點(diǎn)區(qū)分開(kāi),公式為: f ( w , x , b ) = w T x + b f(w,x,b) = w^{T}x+b f ( w , x , b ) = w T x + b

logistic 函數(shù)

線(xiàn)性分類(lèi)器輸出的是一個(gè)數(shù),我們希望這個(gè)數(shù)在區(qū)間[0,1]之間,需要一個(gè)映射關(guān)系,這個(gè)映射關(guān)系就是logistic函數(shù) g ( x ) = 1 1 + e ? x g(x) = \cfrac{1}{1 + e^{-x}} g ( x ) = 1 + e ? x 1 ? 下面使用numpy和matplot繪制該函數(shù)的圖像

            
              x = np.linspace(start=-10,stop=10,num=1000)
y = 1 / (1 + np.exp(-x))
plt.plot(x,y)
plt.show()

            
          

基于sklearn的線(xiàn)性分類(lèi)器logistics(對(duì)數(shù)幾率回歸)Python實(shí)現(xiàn)_第1張圖片
將線(xiàn)性分類(lèi)器公式帶入logistics函數(shù)后,可得logistics回歸模型 f ( x , w , b ) = 1 1 + e ? ( w T x + b ) f(x,w,b) = \cfrac{1}{1 + e{-(w{T}x+b)}} f ( x , w , b ) = 1 + e ? ( w T x + b ) 1 ?

對(duì)數(shù)幾率回歸

對(duì)數(shù)幾率回歸實(shí)際上是在用線(xiàn)性回歸模型的預(yù)測(cè)結(jié)果去逼近真實(shí)的對(duì)數(shù)幾率,特別需要注意的是雖然他的名字是“回歸”,但實(shí)際上卻是一種分類(lèi)學(xué)習(xí)的方法,這種方法的優(yōu)點(diǎn)有很多,例如:

  • 它是直接對(duì)分類(lèi)可能性進(jìn)行建模,無(wú)需事先假設(shè)數(shù)據(jù)分布,這樣就避免了假設(shè)分布不準(zhǔn)所帶來(lái)的問(wèn)題;
  • 它不是僅預(yù)測(cè)“類(lèi)別”,而是可得到近似概率預(yù)測(cè),這對(duì)許多需利用概率輔助決策的任務(wù)很有用;
  • 對(duì)率回歸求解的目標(biāo)函數(shù)是任意階可導(dǎo)的凸函數(shù),有很好的數(shù)學(xué)性質(zhì),現(xiàn)有的許多數(shù)值化算法都可直接用于求解最優(yōu)解。

使用python實(shí)現(xiàn)logistics

實(shí)驗(yàn)環(huán)境

  • 操作系統(tǒng):win10 64
  • 編程語(yǔ)言:Python3.7.3

導(dǎo)入Python庫(kù)

            
              import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import re
import csv
from sklearn.feature_extraction import DictVectorizer

            
          

數(shù)據(jù)源

我們用買(mǎi)電腦的例子作為數(shù)據(jù)源
基于sklearn的線(xiàn)性分類(lèi)器logistics(對(duì)數(shù)幾率回歸)Python實(shí)現(xiàn)_第2張圖片
基于sklearn的線(xiàn)性分類(lèi)器logistics(對(duì)數(shù)幾率回歸)Python實(shí)現(xiàn)_第3張圖片

將這些數(shù)據(jù)記錄保存成 .csv 文件:

            
              RID,age,income,student,credit_rating,class:buys_computer
1,youth,hight,no,fair,no
2,youth,hight,no,excellent,no
3,middle_aged,hight,no,fair,yes
4,senior,medium,no,fair,yes
5,senior,low,yes,fair,yes
6,senior,low,yes,excellent,no
7,middle_aged,low,yes,excellent,yes
8,youth,medium,no,fair,no
9,youth,low,yes,fair,yes
10,senior,medium,yes,fair,yes
11,youth,medium,yes,excellent,yes
12,middle_aged,medium,no,excellent,yes
13,middle_aged,hight,yes,fair,yes
14,senior,medium,no,excellent,no

            
          

這些數(shù)據(jù)即我們這次應(yīng)用的數(shù)據(jù)源

數(shù)據(jù)整理

利用python標(biāo)準(zhǔn)庫(kù)中 csv 對(duì)這個(gè)數(shù)據(jù)源進(jìn)行讀取
整理原始數(shù)據(jù)集,把隨機(jī)變量放在一個(gè)數(shù)組,分類(lèi)結(jié)果放到另一個(gè)數(shù)組,形如:

            
              future_list = [
    {
        "age"   : "youth",
        "income": "hight",
        ...
    }
    ...
]
?
answer_list = ["no", "no", "yes", ...]

            
          

按照這個(gè)思路我們構(gòu)造一下:

            
              data_file = open("computer_buy.csv", "r")
reader = csv.reader(data_file)
headers = next(reader)

future_list = []
label_list = []

for row in reader:
    label_list.append(row[-1])
    row_dict = {}
    for i in range(1, len(row) - 1):
        row_dict[headers[i]] = row[i]
    future_list.append(row_dict)
data_file.close()

            
          

隨機(jī)變量向量化

在 sklearn 提供的庫(kù)中,對(duì)輸入的特征有一定的要求,所有特征和分類(lèi)都要是數(shù)值型的值,不能是例子中的類(lèi)別的值。

怎么轉(zhuǎn)化呢? 比方說(shuō) age 這個(gè)特征,它有三個(gè)值: youth , middle_aged , senior 。有一條記錄的 age=youth 針對(duì)這個(gè)特征我們就變成:

youth middle_aged senior
1 0 0

那么第一條記錄 youth,hight,no,fair 轉(zhuǎn)化為:

age=middle_aged age=senior age=youth credit_rating=excellent credit_rating=fair credit_rating=fair income=low income=medium student=no student=yes
0 0 1 0 1 1 0 0 1 0

特征向量化

            
              vec = DictVectorizer()
dummy_x = vec.fit_transform(future_list).toarray()

print("dummy_x:", dummy_x)
print("vec.get_feature_names()", vec.get_feature_names())

            
          

特征向量化結(jié)果

            
              dummy_x: [[0. 0. 1. 0. 1. 1. 0. 0. 1. 0.]
 [0. 0. 1. 1. 0. 1. 0. 0. 1. 0.]
 [1. 0. 0. 0. 1. 1. 0. 0. 1. 0.]
 [0. 1. 0. 0. 1. 0. 0. 1. 1. 0.]
 [0. 1. 0. 0. 1. 0. 1. 0. 0. 1.]
 [0. 1. 0. 1. 0. 0. 1. 0. 0. 1.]
 [1. 0. 0. 1. 0. 0. 1. 0. 0. 1.]
 [0. 0. 1. 0. 1. 0. 0. 1. 1. 0.]
 [0. 0. 1. 0. 1. 0. 1. 0. 0. 1.]
 [0. 1. 0. 0. 1. 0. 0. 1. 0. 1.]
 [0. 0. 1. 1. 0. 0. 0. 1. 0. 1.]
 [1. 0. 0. 1. 0. 0. 0. 1. 1. 0.]
 [1. 0. 0. 0. 1. 1. 0. 0. 0. 1.]
 [0. 1. 0. 1. 0. 0. 0. 1. 1. 0.]]

            
          

分類(lèi)結(jié)果向量化

            
              from sklearn import preprocessing
lb = preprocessing.LabelBinarizer()
dummy_y = lb.fit_transform(label_list)

            
          

模型建立

            
              from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()

            
          

模型訓(xùn)練

            
              lr.fit(dummy_x, dummy_y)

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
          verbose=0, warm_start=False)

            
          

模型測(cè)試

            
              from sklearn.metrics import classification_report
#測(cè)試數(shù)據(jù)
first_row = dummy_x[0, :]
new_row = list(first_row)
new_row[0] = 1
new_row[2] = 0

print(lr.score(dummy_x,dummy_y))
y_result = lr.predict(dummy_x)
print(classification_report(dummy_y, y_result, target_names=['NO', 'YES']))

            
          
            
              0.8571428571428571
              precision    recall  f1-score   support

          NO       1.00      0.60      0.75         5
         YES       0.82      1.00      0.90         9

   micro avg       0.86      0.86      0.86        14
   macro avg       0.91      0.80      0.82        14
weighted avg       0.88      0.86      0.85        14

            
          
  • classification_report()用于測(cè)試準(zhǔn)確率,精確率和召回率
  • .score()用于評(píng)估本模型的準(zhǔn)確率

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論