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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习-Logistic回归原理及实战

發布時間:2024/4/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习-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回归原理及实战的全部內容,希望文章能夠幫你解決所遇到的問題。

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