生活随笔
收集整理的這篇文章主要介紹了
机器学习-Logistic回归原理及实战
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Logistic回歸
- 回歸
- 在介紹Logistic回歸之前,先容我介紹一下什么是回歸
- 回歸,指研究一組隨機變量(Y1 ,Y2 ,…,Yi)和另一組(X1,X2,…,Xk)變量之間關系的統計分析方法,又稱多重回歸分析。通常Y1,Y2,…,Yi是因變量,X1、X2,…,Xk是自變量。
- 若自變量和因變量之間保持一種最基本的線性關系,我們稱之為線性回歸,最簡單的線性回歸是指一元線性回歸,關系為Y=a+bX+c。
- 回歸研究的過程一般是一個擬合的過程(找尋最佳擬合)。
- Logistic回歸
- 是一種二分類算法(標簽只有“是”或者“否”兩個選項)
- 利用Sigmoid函數閾值在[0,1]區間上的特性
- 主要思想為:根據現有數據對分類邊界線建立回歸公式
- 本質上就是一個基于條件概率的判別模型
- 公式是這樣的
- 其中θ是參數列向量(也就是我們要求解的),x是樣本列向量(也就是給定的數據集),θ的轉置和x相乘得到矩陣z,g函數實現了任意實數到[0,1]的映射,這樣樣本數據集x都可以映射到[0,1]之間進行分類,h函數則給出了輸出為1的概率。
- 這就是說,如果有合適的θ,配合上x,我們通過上述公式可以計算出一個概率來對樣本x分類,如果這個概率大于0.5,就說這是一個正樣本,否則,這是一個負樣本。
- 問題變為了如何求這個θ了,我們可以通過定義代價函數,配合最大似然估計法,再將公式對數化,得到一個公式,求使公式值最大的θ就可以了,使用梯度上升算法可求。
- 求出θ,也就得到了分類模型了。
- 由于主要介紹庫內使用,具體數學推導就不多贅述了。
- 算法優點
- Logistic回歸的目的是尋找一個非線性函數Sigmoid的最佳擬合參數,只要找到,對于二分類問題,分類較快。
- 算法缺點
- 代碼主要演示sklearn中Logistic回歸使用,具體實現可以斟酌自行完成。
# -*- coding:UTF-8 -*-
"""
sklearn中Logistic回歸的使用
"""
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScalerdef solve():'''處理原始數據原始數據集有缺失,經過處理特征缺失換0,不影響,因為Logistic回歸中立標簽缺失刪除:return:'''rawFile = open('./data/rawdata.txt')dataSet = []label = []print(rawFile)for line in rawFile:line = line.strip()line = line.replace("\n", '')line2list = line.split(' ')if line2list[-1] == "?":passelse:del line2list[2]del line2list[23]del line2list[23]for i in range(len(line2list)):if line2list[i] == "?":line2list[i] = 0dataSet.append(line2list[:len(line2list)-2])label.append(line2list[-1])return dataSet, labeldef scale(dataSet):'''歸一化:param dataSet: 數據集:return:'''scaler = MinMaxScaler()dataSet_new = scaler.fit_transform(dataSet)return dataSet_newdef divide(dataSet, labels):'''比例切分兩個數據集:param dataSet::param labels::return:'''train_data, test_data, train_label, test_label = train_test_split(dataSet, labels, test_size=0.2)return train_data, test_data, train_label, test_labelif __name__ == '__main__':data, labels = solve()data = scale(data)# 得到數據集trainDataSet, testDataSet, trainDataLabel, testDataLabel = divide(data, labels)# 建立模型并訓練# 其中,solver表示優化算法選擇參數,有五個可選參數# newton-cg,lbfgs,liblinear,sag,saga# 默認為liblinear# solver參數決定了我們對邏輯回歸損失函數的優化方法# 具體如何選擇可以查看官方文檔,一般小數據集使用下面使用的即可(多分類不是)# 其中,max_iter指明最大迭代次數,默認為10,一般無效classifier = LogisticRegression(solver='liblinear', max_iter=10).fit(trainDataSet, trainDataLabel)# 給出分類準確率,指明數據集和實際標簽即可rst = classifier.score(testDataSet, testDataLabel) * 100.0print('正確率:{:.2f}'.format(rst))
使用的數據集為馬的數據集,代碼及數據集可以訪問我的github查看。
總結
以上是生活随笔為你收集整理的机器学习-Logistic回归原理及实战的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。