機器學習總復習

這段時間學習了 KNN,線性回歸,邏輯回歸,貝葉斯,聚類(K-means,DBSCAN),決策樹,集成學習(隨機森林,XGboost),SVM支持向量機, TF-IDF,詞向量轉化,PCA降維。這十一種算法。下面進行一一回顧。

KNN

????????這個又叫做K近鄰,大多用于分類,例如房價預測(這里可以預測房價的屬于什么類,如果預測房價價格,可以取范圍內房價的平均數)。

算法簡述:

????????通過計算特征之間的距離(歐式距離或者其他),然后通過距離內的存在的標簽進行投票,然后進行分類,去存在最多的那種標簽。

重要參數:

from sklearn.neighbors import KNeighborsClassifier
model=KNeighborsClassifier(n_neighbors=5)
model.fit(train_X,train_y)
result1=model.score(test_X,test_y)
print(result1)

這里重要參數就一個n_neighbors,可以用來控制取周圍幾個最近的標簽點。

線性回歸

這個平時用來預測回歸問題,例如根據人體的各個指標來預測他們的血壓收縮。

算法簡述

? ? ? ? 通過擬合y=wx+b,這一條線來預測,這個過程中會有點偏離我們的線,然后引入了一個誤差項Q=y-(wx+b),同時這個誤差項滿足標準正態分布,也就是說把Q帶入標準正態分布表達式之后,這個正態分布的值越大,這個Q也就越小(具體看正態分布函數圖像),然后就通過最小二乘法,梯度下降來求出最優W值。

重要參數:

from sklearn.linear_model import LinearRegression
model=LinearRegression()
model.fit(X,y)
result1=model.score(X,y)
a=model.coef_[0]
b=model.intercept_

這個沒什么重要參數,注意后面可以使用斜率和截距來預測結果。

邏輯回歸

這個和線性回歸很像,這個看著像是回歸算法,但其實這個是一個分類算法。

算法簡述

這個邏輯回歸就是在線性回歸的基礎上進行了改進,主要內容就是,在求出上面邏輯回歸的那條直線后,我們可以加一條z軸,然后引入一個sigmod激活函數,然后這個sigmod曲線在直線的正上方,然后我們把平面上的點映射到直線上,然后得出一個值,然后再帶入到sigmod曲線中,然后把值映射到0-1之間,判斷屬于這一類的概率。

重要參數

from sklearn.linear_model import LogisticRegression
model=LogisticRegression(max_iter=1000,C=1.0,penalty='l2')
model.fit(data_train,label_train)
print(model.score(data_test,label_test))

正則化強度倒數C?(值越小,正則化越強,默認=1)是最重要的。這個可以控制權重的幅度,例如(1,0,0)和(0.3,0.3,0.3)顯然是第二種比較好,然后我們的懲罰系數在第一種的時候就比第二種大,就會選用第二種。

正則化方法panalty,主要有兩種L1正則化,L2正則化,L1和L2的區別就是L1是權重的絕對值之和,L2是權重的平方之和。這個C就是前面的系數

貝葉斯

這個算法主要用在語言處理上,在其他方面準確率表現比較低

算法簡述

這個算法原理比較簡單,就是根據已有數據,求出概率,然后帶入高斯貝葉斯,多項式貝葉斯,或者什么貝葉斯來計算,就行了。

重要參數

from sklearn.naive_bayes import BernoulliNB
model=BernoulliNB()
model.fit(train_X,train_y)
print(model.score(test_X,test_y))

這里沒什么重要參數

K-means

這個是一個聚類算法,無監督學習不需要標簽就可以進行

算法簡述

? ? ? ? 開始隨機選取K個點作為質心(可調,我們傳入的參數),然后計算每個點到質心的距離,選取離質心最近的幾個點分配給他。然后更新質心為分類簇的質心,逐漸迭代,到質心不發生變化為止。

重要參數

modle=KMeans(n_clusters=best_K)
modle.fit(X)
labels = modle.labels_
print('輪廓系數:',metrics.silhouette_score(X,labels))

n_clusters,就是最初質心個數的選擇。

max_iter 迭代次數,如果迭代的不夠,模型結果可能不會那么準確

DBSCAN

????????這個與上面K-means算法差不多都是聚類,唯一不同就是聚類的方法不同。這個可以用于人臉識別,可以聚類出那種線性的類。

算法簡述

????????DBSCAN開始會隨機選一個點,開始傳染,找距離內的幾個點,然后就這樣一直傳染,最終變成一簇。每個簇都是這樣。也可以這么說,每個點就找自己距離內的那個點,然后作為一類,最終可以看出分為幾個類

重要參數

from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=2.5, min_samples=5, metric='euclidean')
clusters = dbscan.fit_predict(X)
print(clusters)

eps;用來控制距離,搜索周邊多少距離內的點

min_samples;用來表示搜索的時候距離內有多少點,才允許傳染。

決策樹

這個算法獨自用的比較少,主要用來結合起來一起用于后面的隨即森林。

算法簡述

決策樹有三種方法ID3,C4.5,CART,這三種算法。ID3是計算信息增益的,C4.5是在ID3的基礎上計算信息增益率,CART是計算基尼指數。

重要參數

from sklearn.tree import DecisionTreeClassifier
model=DecisionTreeClassifier(criterion="gini",max_depth=best[0],random_state=42,min_samples_split=best[1],min_samples_leaf=best[2],max_leaf_nodes=best[3])
model.fit(train_X,train_y)
  • ?**criterion**?:分裂標準,可選?'gini'(基尼系數)或?'entropy'(信息增益)。
  • ?**max_depth**?:樹的最大深度(限制過擬合關鍵參數)。
  • ?**min_samples_split**?:節點分裂所需最小樣本數(值越大,樹越簡單)。
  • ?**min_samples_leaf**?:葉節點最小樣本數(控制葉子大小)

集成學習(隨機森林)

? ? ? ? 這個就是上面算法的究極形態了,這個就是并行訓練,這個還可以進行重要特征提取

算法簡述

????????這個算法就是前面決策數進行整合,創建許多決策樹模型,然后每個模型取百分之80的特征進行訓練,然后把訓練結果進行綜合得出一個最佳。因為部分特征可能會影響訓練結果。所以這選取0.8的特征就很有效果。

重要參數

from sklearn.ensemble import RandomForestClassifier
model=RandomForestClassifier(max_features='sqrt',n_jobs=-1,n_estimators=100,max_depth=10,min_samples_leaf=10,max_leaf_nodes=10)
model.fit(train_X,train_y)im = pd.DataFrame({'feature':train_X.columns,'importances': model.feature_importances_
})
im = im.sort_values(by=['importances'], ascending=False)[:10]
print(im)
  1. n_estimators=100?- 創建100棵決策樹組成的森林
  2. max_depth=5?- 限制每棵樹的最大深度,防止單個樹過擬合
  3. max_features='sqrt'?- 每次分裂時只考慮√(總特征數)個特征
  4. min_samples_split=2?- 節點至少需要2個樣本才能繼續分裂
  5. model.feature_importances_這個可以獲取重要特征

集成學習(XGboost)

這個是串行訓練

算法簡述

針對一個訓練集,xgboost首先使用CART樹訓練得到一個模型,這樣針對每個樣本都會產生一個偏差值;然后將樣本偏差值作為新的訓練集,繼續使用CART樹訓練得到一個新模型;以此重復,直至達到某個退出條件為止。引入了正則化項(L1/L2)控制模型復雜度以防止過擬合,優化了特征選擇和分裂點算法(近似分位點、列采樣),支持并行計算,處理缺失值等。

重要參數

from xgboost import XGBClassifier
xgb_model = XGBClassifier(# 樹結構參數max_depth=3,                # 樹的最大深度min_child_weight=1,         # 子節點樣本權重和的最小值# 正則化參數gamma=0.1,                  # 分裂所需最小損失減少量reg_lambda=1.0,             # L2正則化權重# 學習控制learning_rate=0.1,          # 學習率n_estimators=100,           # 樹的數量# 抽樣策略subsample=0.8,              # 訓練樣本采樣比例colsample_bytree=0.8,       # 特征采樣比例# 其他參數random_state=42,            # 確保結果可復現use_label_encoder=False     # 避免警告
)

SVM支持向量機

這個適用于小樣本的訓練

算法簡述

在一個線性可分的兩組數據中找到一個線(高維的兩組數據就是超平面),這個超平面的限制條件就是在兩組數據中夾著,并且距離相隔最大。如果線性不可分就映射到高維空間,映射到可分為止。這個映射函數就是核函數,核函數一般是高斯核函數或者其他核函數。

重要參數

from sklearn.svm import SVC
model = SVC(kernel='linear', C=float('inf'))
model.fit(X, y)

kernel這是核函數(如?'linear'(線性)、'rbf'(高斯核)、'poly'(多項式核)),選取適當的核函數,事半功倍。

C是懲罰系數,這個的大小決定了我們是否容忍軟間隔。(值越大,對誤分類的容忍度越低,可能過擬合)

TF-IDF

這個算法是用來提取文本特征的,重要詞,和關鍵詞的

算法簡述

詞a在文章出現的次數/這個文章的總詞數? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (TF)

------------------------------------------------------

log(文檔總數/包含詞a的文章數+1)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(IDF)

大致意思就是,先看在本文中重要不重要,再看這個詞普遍不普遍,如果很普遍那就不重要了。

重要參數

from sklearn.feature_extraction.text import TfidfVectorizer
model=TfidfVectorizer()
data=open('結果1.txt',encoding='utf-8')
jg=model.fit_transform(data)
print(jg)
wordlist=model.get_feature_names_out()
print(wordlist)
import pandas as pd
df=pd.DataFrame(jg.T.todense(),index=wordlist)
print(df)
# featurelist = df.iloc[:,5].tolist()
# print(featurelist)

這個我們要知道model.fit_transform(data)的結果是一個字典,其中第一列(n,n)表示第n篇文章第n個單詞,后面表示這個的重要指標。

model.get_feature_names_out()是一個列表。表示出現的所有詞的name

pd.DataFrame(jg.T.todense(),index=wordlist)這個就轉化為了一個表格,行為第幾篇文章,列為name

詞向量轉化

把單詞轉化為可訓練的數據

算法簡述

把每句話轉化為一個矩陣,首先先對每句話進行結巴分詞,然后分出多少次就有多少個特征,根據這個特征是否在文章中出現作為那個位置的特征為0/1,然后[0 1 1 1 1 1]這樣就是一句話的特征了。然后有了數據又有了標簽的化就可以訓練了,前面也說過貝葉斯比較適合文本訓練

重要參數

from sklearn.feature_extraction.text import CountVectorizer
texts=["dog cat fish","dog cat cat","fish bird",'bird']
model=CountVectorizer(max_features=6,ngram_range=(1,3))
model.fit(texts)
print(model.get_feature_names_out())
print(model.transform(texts))
print(model.transform(texts).toarray())

max_features=6表示要分出幾個特征(取全文出現頻率最多的幾個)

ngram_range=(1,3)表示每個特征的詞數控制在1-3個單詞

lowercase=False表示要不要全轉化為小寫,如果是中文的話就要寫成false

PCA降維

這個和隨機森林降維差不多,選取重要特征

算法簡述

這個通過把數據映射一下,到另一個坐標中,映射標準是映射的足夠離散,然后把數據量少的那一個維度去除。

重要參數

pca = PCA(n_components=20)
pca.fit(X)
X_pca = pca.fit_transform(X)

n_components=20 用于控制降低到多少維度

X_pca = pca.fit_transform(X)這個就可以把訓練結果導出來了。

評價方式

回歸

準確率,召回率

分類

MSE,RMSE,MAE,R方

聚類

輪廓系數,衡量聚類緊密度和分離度。值在[-1,1]之間,越接近1表示聚類效果越好。

選取建議

數據處理

數據不均衡

過采樣

使用SMOTE來過采樣,這個算法的原理也是距離方法,例如這個有兩個點,然后過采樣我就把這兩個點連接,在這個線段內取出n個點作為過采樣的點。

from imblearn.over_sampling import SMOTE#imblearn這個庫里面調用,
oversampler =SMOTE(random_state=0)#保證數據擬合效果,隨機種子
train_X, train_y = oversampler.fit_resample(train_X,train_y)#人工擬合數據

下采樣

pe=train_data[train_data['Class'] == 1]
ne=train_data[train_data['Class'] == 0]d1 = ne.sample(len(pe))train_data = pd.concat([d1,pe])

就是把訓練集兩類特征分開,從多的那一個里面隨機取樣出少的那一個樣本的個數

數據異常值和空值

異常值

把異常值轉化為空值

for i in X.columns:X[i]=pd.to_numeric(X[i],errors='coerce')

空值

空值可以選取中位數,平均數,眾數,或者用線性回歸預測來填充。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93719.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93719.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93719.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入解析EventPoller:Disruptor的輪詢式事件處理機制

EventPoller 是什么?EventPoller 是 Disruptor 框架中一種 基于輪詢(poll-based) 的事件消費機制。它與我們更常見的 BatchEventProcessor(基于獨立的消費者線程)形成了對比。核心區別在于:BatchEventProce…

K8S-Secret資源對象

目錄 一、Secret概述 二、Secret 類型 kubectl 創建類型 三、Secret 使用 Opaque 類型 Secret 的使用 創建 yaml 一、Secret概述 k8s secrets用于存儲和管理一些敏感數據,比如密碼,token,密鑰等敏感信息。它把 Pod 想要訪問的加密數據…

lua入門以及在Redis中的應用

1.基本語法1.1變量lua的變量有:無效值nil,布爾值boolean,數字number、字符串string、函數function、自定義類型userdata、線程thread、表table(key-value結構)1.2循環數值循環for i起始值, 結束值 ,間隔值 do---option…

淘寶電商大數據采集【采集內容||采集方法|工具||合規性||應用】

淘寶電商大數據采集是指通過技術手段、工具或平臺,系統性收集淘寶(及旗下天貓等)生態內的各類數據,用于分析市場趨勢、用戶行為、商品表現、競品動態等,為電商運營、決策提供數據支持。以下從采集內容、工具方法、合規…

ROS2核心模塊

1.創建工作空間先創建工作空間ws01_plumbing,終端下進入工作空間的src目錄,執行如下命令:ros2 pkg create --build-type ament_cmake base_interfaces_demo2.話題通信話題通信是ROS中使用頻率最高的一種通信模式,話題通信是基于發…

Mac 上安裝并使用 frpc(FRP 內網穿透客戶端)指南

一、先裝好 Homebrew(macOS 的包管理器)打開終端(Terminal),先裝命令行開發工具 xcode-select --install彈窗點“安裝”,等待 3~5 分鐘。一鍵安裝 Homebrew /bin/bash -c "$(curl -fsSL https://raw.g…

04_接口與包管理

第4課:接口與包管理 課程目標 深入理解Go語言接口的概念和用法 掌握接口的組合和空接口 學會使用Go Modules進行包管理 理解包的導入和導出規則 1. 接口基礎 1.1 接口定義 // 基本接口定義 type Shape interface {Area() float64Perimeter()

福昕PDF編輯軟件高級版下載與詳細圖文安裝教程!!

軟件下載 【軟件名稱】: 福昕PDF編輯器高級版 【軟件大小】:668.9MBa a【系統要求】:awin10/win11或更高 福昕,軟件下載(夸克網盤需手機打開)::福昕丨夸克網盤-資源免費下載 軟件介…

利用無事務方式插入數據庫解決并發插入問題(最小主鍵id思路)

一、背景 由于某業務需要回退某產品數據緩存列表Asset資源,主任務執行后,通過并行執行批量子任務進行數據回退,子任務中會記錄緩存列表Asset和緩存列表行AssetLine數據,并行執行過程會出現緩存列表行AssetLine重復插入問題&#…

如何制作免費的比特幣冷錢包

本文主要從技術上討論冷錢包的操作機制和原理,并不作為投資建議。對于國外的比特幣玩家,或者打算長期囤幣來對抗通貨膨脹的,或者是想短期持有的,那么將比特幣存儲在哪里是一個Common的問題。一般是兩類選擇。第一種選擇是存儲在交…

新手向:Python制作簡易音樂播放器

使用Python構建簡易音樂播放器音樂播放器是現代數字生活中不可或缺的工具,從智能手機到電腦系統,幾乎每個設備都內置了音樂播放功能。對于Python初學者來說,開發一個簡易的音樂播放器是一個很好的實踐項目,既能學習編程基礎&#…

【StarRocks】TabletChecker邏輯

TabletChecker是StarRocks FE里的一個組件,它的主要工作是檢查出所有的處于不健康狀態的tablets。 注意,它的職責就是check(檢查)。 至于tablet修復、均衡等調度工作不是TabletChecker的職責。 相關配置項 // 20秒執行一次check,代碼里是執行runAfterCatalogReady()publi…

低空經濟展 | 優翼仿真攜eVTOL全動飛行模擬器亮相2025深圳eVTOL展

2025深圳eVTOL展將于2025年9月23-25日在深圳坪山燕子湖國際會展中心舉行。展會以“低空經濟?eVTOL?航空應急救援?商載大型無人運輸機”為主題,以 “2天大會3天展覽項目考察飛行表演頒獎盛典項目路演”的多元模式,打造覆蓋 eVTOL全產業鏈的專業化合作平…

AI驅動商業革新:開源大模型與零售精準營銷引領產業升級

在當今數字化浪潮中,AI 正以迅猛之勢滲透至商業的每一處脈絡,掀起一場影響深遠的變革風暴,從根本上改寫著商業運轉的底層邏輯,創造出無數嶄新的商業契機。基礎模型領域,新的突破正在重塑行業格局。Meta 旗下的 LLaMA 3…

【表的操作】

文章目錄 一、查看所有表 1、語法 二、創建表 1、語法 2、?例 3、表在磁盤上對應的?件 4、創建數據加時使?校驗語句[if not exists] 三、查看表結構 1、語法 2、?例 四、修改表 1、語法 2、?例 (1)向表中添加?列 (2)修改某列的?度 (3)重命名某列 (4)刪除某個字段…

【Java后端】Spring Boot 全局異常處理最佳實踐

Spring Boot 全局異常處理最佳實踐 在日常開發中,異常處理幾乎是繞不過去的一個話題。尤其在 后端 API 項目 中,如果沒有統一的異常處理機制,很容易出現以下問題: Controller 層代碼里充斥著 try-catch,顯得冗余。前端…

K8S-Configmap資源

目錄 一、核心概念? ?定義? ?核心價值? ?與Secret的區別? ?二、核心特性? ?數據存儲? ?生命周期? ?作用域? 什么是 Configmap? Configmap 能解決哪些問題? ConfigMap 的主要作用 三、命令行直接創建 四、通過文件創建&#xf…

MySQL InnoDB事務acid特性的原理和隔離級別的實現原理

InnoDB存儲引擎 InnoDB存儲結構表空間 則每張表都會有一個表空間(xxx.ibd),一個mysql實例可以對應多個表空間 系統表空間 存儲數據字典(表結構定義、索引信息等)、Change Buffer、Doublewrite Bufferundo log&#xff…

Linux系統之部署nullboard任務管理工具

Linux系統之部署nullboard任務管理工具一、nullboard介紹1.1 nullboard簡介1.2 任務看板工具介紹1.3 nullboard使用場景二、本次實踐介紹2.1 本地環境規劃2.2 本次實踐介紹三、安裝httpd軟件3.1 檢查yum倉庫3.2 安裝httpd軟件3.3 啟動httpd服務3.4 查看httpd服務狀態3.5 防火墻…

Qt設置軟件使用期限【新版防修改系統時間】

在工業軟件或其他領域中,經常會對軟件進行授權,軟件需要付費進行有期限的使用。以下是我用Qt設計的設置軟件使用期限的兩種方案。 主體思想: 1.軟件需要綁定機器,讓用戶無法通過復制在另一臺機器上運行。 2.由廠家提供激活碼供用戶…