人工智能機器學習——決策樹、異常檢測、主成分分析(PCA)

一、決策樹(Decision Tree)

在這里插入圖片描述
決策樹:一種對實例進行分類的樹形結構,通過多層判斷區分目標所屬類別

本質:通過多層判斷,從訓練數據集中歸納出一組分類規則

優點:

  • 計算量小,運算速度快
  • 易于理解,可清晰查看各屬性的重要性

缺點:

  • 忽略屬性間的相關性
  • 樣本類別分布不均勻時,容易影響模型表現

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
參考資料:https://www.cnblogs.com/callyblog/p/9724823.html

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

二、異常檢測(Anomaly Detection)

在這里插入圖片描述
在這里插入圖片描述

異常檢測:根據輸入數據,對不符合預期模式的數據進行識別

在這里插入圖片描述

概率密度:概率密度函數是一個描述隨機變量在某個確定取值點附近的可能性的函數
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

三、主成分分析(PCA)

數據降維(Dimensionality Reduction)
在這里插入圖片描述

數據降維,是指在某些限定條件下,降低隨機變量個數,得到一組“不相關”主變量的過程。

作用:

  • 減少模型分析數據量,提升處理效率,降低計算難度;
  • 實現數據可視化。
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述

數據降維的實現:主成分分析(PCA)

PCA(principal components analysis):數據降維技術中,應用最最多的方法

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

四、Python實戰準備

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

五、實戰:決策樹實現iris數據分類

在這里插入圖片描述
在這里插入圖片描述

五、決策樹實戰,使用數據集iris_data.csv

#加載數據
import pandas as pd
import numpy as np
data = pd.read_csv('iris_data.csv')
data.head()

在這里插入圖片描述

#賦值x,y
x = data.drop(['target','label'],axis=1)
y = data.loc[:,'label']
print(x.shape,y.shape)

在這里插入圖片描述

#創建決策樹模型
from sklearn import tree
dc_tree = tree.DecisionTreeClassifier(criterion='entropy',min_samples_leaf=5)
dc_tree.fit(x,y)

在這里插入圖片描述

#評估模型表現
y_predict = dc_tree.predict(x)
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

在這里插入圖片描述

#可視化模型結構
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(10,10))
tree.plot_tree(dc_tree,filled=True,feature_names=['SepalLength','SepalWidth','PetalLength','PetalWidth'],class_names=['setosa','versicolor','virginica'])

在這里插入圖片描述

dc_tree = tree.DecisionTreeClassifier(criterion='entropy',min_samples_leaf=2)
dc_tree.fit(x,y)
fig = plt.figure(figsize=(10,10))
tree.plot_tree(dc_tree,filled=True,feature_names=['SepalLength','SepalWidth','PetalLength','PetalWidth'],class_names=['setosa','versicolor','virginica'])

在這里插入圖片描述

六、異常檢測實戰,使用數據集anomaly_data.csv

#異常檢測
import pandas as pd
import numpy as np
data = pd.read_csv('anomaly_data.csv')
data.head()

在這里插入圖片描述

from matplotlib import pyplot as plt 
fig3 = plt.figure()
plt.scatter(data.loc[:,'x1'],data.loc[:,'x2'])
plt.title('data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

在這里插入圖片描述

#賦值x,y
x1 = data.loc[:,'x1']
x2 = data.loc[:,'x2']
fig4 = plt.figure(figsize=(10,5))
plt.subplot(121)
plt.hist(x1,bins=100)
plt.title('x1 distribution')
plt.xlabel('x1')
plt.ylabel('counts')plt.subplot(122)
plt.hist(x2,bins=100)
plt.title('x2 distribution')
plt.xlabel('x2')
plt.ylabel('counts')
plt.show()

在這里插入圖片描述

#計算均值和標準差
x1_mean = x1.mean()#均值
x1_signa = x1.std()#標準差
x2_mean = x2.mean()#均值
x2_signa = x2.std()#標準差
print(x1_mean,x1_signa,x2_mean,x2_signa)

在這里插入圖片描述

#計算高斯分布密度函數
from scipy.stats import norm
x1_range = np.linspace(0,20,300)
x1_normal = norm.pdf(x1_range,x1_mean,x1_signa)x2_range = np.linspace(0,20,300)
x2_normal = norm.pdf(x2_range,x2_mean,x2_signa)
fig5 = plt.figure()
plt.subplot(121)
plt.plot(x1_range,x1_normal)
plt.title('normal p(x1)')plt.subplot(122)
plt.plot(x2_range,x2_normal)
plt.title('normal p(x2)')
plt.show()

在這里插入圖片描述

#建立模型
from sklearn.covariance import EllipticEnvelope
ad_model = EllipticEnvelope()
ad_model.fit(data)

在這里插入圖片描述

#預測數據
y_predict = ad_model.predict(data)
print(y_predict)

在這里插入圖片描述

#可視化數據
fig4 = plt.figure()
original_data=plt.scatter(data.loc[:,'x1'],data.loc[:,'x2'],marker='x')
normaly_data=plt.scatter(data.loc[:,'x1'][y_predict==-1],data.loc[:,'x2'][y_predict==-1],marker='o',facecolor='none',edgecolor='red',s=120)
plt.title('data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend((original_data,normaly_data),('original_data','normaly_data'))
plt.show()

在這里插入圖片描述

#修改域值大小
ad_model = EllipticEnvelope(contamination=0.02)#默認0.1
ad_model.fit(data)
y_predict = ad_model.predict(data)#可視化數據
fig5 = plt.figure()
original_data=plt.scatter(data.loc[:,'x1'],data.loc[:,'x2'],marker='x')
normaly_data=plt.scatter(data.loc[:,'x1'][y_predict==-1],data.loc[:,'x2'][y_predict==-1],marker='o',facecolor='none',edgecolor='red',s=120)
plt.title('data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend((original_data,normaly_data),('original_data','normaly_data'))
plt.show()

在這里插入圖片描述

七、主成分分析(PCA)實戰,使用數據集iris_data.csv

#加載數據
import pandas as pd
import numpy as np
data = pd.read_csv('iris_data.csv')
data.head()

在這里插入圖片描述

#賦值x,y
x = data.drop(['target','label'],axis=1)
y = data.loc[:,'label']
print(x.shape,y.shape)

在這里插入圖片描述

#KNN模型
from sklearn.neighbors import KNeighborsClassifier
KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(x,y)

在這里插入圖片描述

y_predict = KNN.predict(x)from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

在這里插入圖片描述

#數據預處理
from sklearn.preprocessing import StandardScaler
X_norm = StandardScaler().fit_transform(x)
print(X_norm)
#計算均值和標準差
x1_mean = x.loc[:,'sepal length'].mean()
x1_signa = x.loc[:,'sepal length'].std()X_norm_mean = X_norm[:,0].mean()
X_norm_signa = X_norm[:,0].std()print(x1_mean,x1_signa,X_norm_mean,X_norm_signa)

在這里插入圖片描述

from matplotlib import pyplot as plt
fig1 = plt.figure()
plt.subplot(121)
plt.hist(x.loc[:,'sepal length'],bins=100)plt.subplot(122)
plt.hist(X_norm[:,0],bins=100)
plt.show()

在這里插入圖片描述

#主成分分析(PCA)
from sklearn.decomposition import PCA
pca = PCA(n_components=4)
X_pca = pca.fit_transform(X_norm)#計算各個維度方差
var_ratio = pca.explained_variance_ratio_
print(var_ratio)

在這里插入圖片描述

fig2 = plt.figure()
plt.bar([1,2,3,4],var_ratio)
plt.xticks([1,2,3,4],['PC1','PC2','PC3','PC4'])
plt.ylabel('ratio of each PC')
plt.show()

在這里插入圖片描述

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_norm)
print(X_pca.shape,type(X_pca))

在這里插入圖片描述

#可視化展示數據
fig3 = plt.figure()
setosa=plt.scatter(X_pca[:,0][y==0],X_pca[:,1][y==0])
ver=plt.scatter(X_pca[:,0][y==1],X_pca[:,1][y==1])
vir=plt.scatter(X_pca[:,0][y==2],X_pca[:,1][y==2])
plt.legend([setosa,ver,vir],['setosa','ver','vir'])
plt.show()

在這里插入圖片描述

#創建降維后的KNN模型
KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(X_pca,y)y_predict = KNN.predict(X_pca)from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

在這里插入圖片描述

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

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

相關文章

服務器文件同步用哪個工具?介紹一種安全高效的文件同步方案

服務器作為企業核心數據和應用的載體,服務器文件同步已成為IT運維、數據備份、業務協同中不可或缺的一環。然而,面對多樣的場景和嚴苛的需求,選擇一個既高效又安全的服務器文件同步工具并非易事。本文將首先探討服務器文件同步的常見場景、需…

LeetCode 004. 尋找兩個正序數組的中位數 - 二分切分與分治詳解

一、文章標題 LeetCode 004. 尋找兩個正序數組的中位數 - 二分切分與分治詳解 二、文章內容 1. 題目概述 題目描述:給定兩個已按非降序排列的整數數組 nums1、nums2,設它們長度分別為 m 和 n,要求返回這兩個數組合并后有序序列的中位數。…

預閃為什么可以用來防紅眼?

打閃拍照紅眼產生的原因 預閃可以用來防紅眼,是基于人眼的生理特性和紅眼現象的產生原理。在光線較暗時,人眼的瞳孔會放大。當使用閃光燈拍攝時,如果直接進行高強度閃光,由于瞳孔來不及縮小,閃光燈的光線會反射在眼球血…

Python程序使用了Ffmpeg,結束程序后,文件夾中仍然生成音頻、視頻文件

FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,并能將其轉化為流的開源計算機程序。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量&#xff0…

模塊與包的導入

077-模塊-06-模塊搜索順序_嗶哩嗶哩_bilibili 080-包-01-包的概念以及建立包的方式_嗶哩嗶哩_bilibili 088-文件操作-01-文件操作套路以及Python中的對應函數和方法_嗶哩嗶哩_bilibili 注: 1.import math和 from math import *區別 2. 模塊(Module…

Docker Compose 多種安裝方式 (Alibaba Cloud Linux 3 環境)

Docker Compose 多種安裝方式,適用于不同場景(如依賴系統包管理器、使用 Python 工具鏈、集成 Docker 插件等)。以下是常見的方案,尤其針對 Alibaba Cloud Linux 3 環境適配: 一、二進制包安裝(推薦&#…

Dubbo3序列化安全機制導致的一次生產故障

前言 記錄一次 Dubbo 線上故障排查和原因分析。 線上 Dubbo 消費者啟動有錯誤日志如下,但是不影響服務啟動。 java.lang.TypeNotPresentException: Type org.example.model.ThirdParam not present ... Caused by: java.lang.ClassNotFoundException: org.example.m…

centos7 docker離線安裝

介紹 本文主要講了如何在完全沒網的情況下安裝docker(適合于高網絡安全要求的企業) 本文適用的centos版本: [root0001 temp]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 采用docker in docker下載依賴 實際試驗后&…

東京本社招聘 | 財務負責人 多個日本IT崗位(Java/C++/Python/AWS 等),IT營業同步招募

大家好,本期為大家帶來我司在東京GSD本社及其他會社千葉地區的招聘崗位。 涵蓋 財務負責人、Java開發工程師、數據中心維護工程師、項目經理、IT營業 等多個職位。 歡迎有志之士加入!🔹 財務負責人(東京本社)工作內容日…

四數之和

目錄 一:題目鏈接 二:題目思路 三:代碼實現 一:題目鏈接 理解題目需要注意,如果兩個四元組元素一一對應,則認為兩個四元組重復,選擇其中一個四元組即可。比如 [ 0 , 1 , 0 , 2] 和 [ 1 , …

【序列晉升】29 Spring Cloud Task 微服務架構下的輕量級任務調度框架

Spring Cloud Task作為微服務架構中的輕量級任務調度框架,為開發人員提供了一種構建短生命周期微服務任務的便捷方式。它允許開發者快速創建、執行和管理一次性任務或短期批處理作業,任務執行完成后自動關閉以釋放系統資源,避免了傳統長期運行…

【1分鐘速通】 HTML快速入門

HTML&#xff08;HyperText Markup Language&#xff0c;超文本標記語言&#xff09; 是構建網頁的基礎語言。它通過 標簽&#xff08;Tag&#xff09; 來描述網頁的結構和內容&#xff0c;常與 CSS&#xff08;負責樣式 – <style></style>&#xff09;和 JavaScr…

【GeoServer】WMS GetFeatureInfo URL 逐個參數解釋

我來把你構造的這個 WMS GetFeatureInfo URL 逐個參數解釋一下&#xff0c;方便你理解&#xff1a;http://127.0.0.1:8090/geoserver/xxxx/wms? SERVICEWMS& VERSION1.1.1& REQUESTGetFeatureInfo& QUERY_LAYERSloess:yourLayer& LAYERSloess:yourLayer& …

OBS直播教程:點歌直播間怎么弄?直播點歌用什么軟件?

OBS直播教程&#xff1a;點歌直播間怎么弄&#xff1f;直播點歌用什么軟件&#xff1f; 第一步&#xff1a;安裝OBS直播軟件&#xff0c;如果你電腦已經安裝了OBS&#xff0c;請直接看第二步 OBS直播軟件下載地址①&#xff1a; https://d.obscj.com/obs-Studio-29.1.3-Full-…

【數據庫】Redis詳解:內存數據庫與緩存之王

什么是Redis&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的、基于內存的數據結構存儲系統&#xff0c;可以用作數據庫、緩存和消息代理。它支持多種數據結構&#xff0c;如字符串、哈希、列表、集合、有序集合等&#xff0c;具有極高的性能和…

【iOS】 單例模式

1. 認識單例模式首先讓我們先看下關于單例模式的定義&#xff08;來自于《設計模式》(Addison-Wesley,1994)&#xff09;一個類有且僅有一個實例&#xff0c;并且自行實例化向整個系統提供。如果說每一個人都是一個類&#xff0c;那么從他出生開始&#xff0c;他就是生活中的唯…

多目標輪廓匹配

前面我們使用模板匹配&#xff0c;得到的結果都是一個圖&#xff0c;那么如果我們圖片中有許多我們的目標&#xff0c;那么該如何找出來呢&#xff1f;如上我們圖片中有許多箭頭和我們的模板一致&#xff0c;只不過方向不對&#xff0c;那么該如何匹配呢&#xff1f;圖片和模板…

【C++】簡單介紹lambda表達式

各位大佬好&#xff0c;我是落羽&#xff01;一個堅持不斷學習進步的學生。 如果您覺得我的文章還不錯&#xff0c;歡迎多多互三分享交流&#xff0c;一起學習進步&#xff01; 也歡迎關注我的blog主頁: 落羽的落羽 文章目錄一、 什么是lambda表達式二、 表達式語法三、lambd…

磁共振成像原理(理論)4:自由進動和弛豫 (Free Precession and Relaxation)

當磁化自旋系統被射頻脈沖擾動而偏離其熱平衡態后&#xff0c;一旦移除外部激勵并給予足夠時間&#xff0c;系統將根據熱力學定律返回平衡態。這一過程包含三個特征現象&#xff1a; (a) 自由進動——宏觀磁化矢量 (M?\vec{M}M) 繞( B0?\vec {B_0}B0?? )場的進動&#xff1…

ubuntu 20.04 安裝spark

安裝openjdk21 下載 wget https://download.java.net/openjdk/jdk21/ri/openjdk-2135_linux-x64_bin.tar.gz解壓 tar -xvf openjdk-2135_linux-x64_bin.tar.gzsudo mv jdk-21/ /opt/jdk-21/設置環境變量 echo export JAVA_HOME/opt/jdk-21 | sudo tee /etc/profile.d/java2…