數據分析與應用-----使用scikit-learn構建模型

目錄

一、使用sklearn轉換器處理數據

(一)、加載datasets模塊中的數據集

(二)、將數據集劃分為訓練集和測試集?

?編輯?train_test_spli

(三)、使用sklearn轉換器進行數據預處理與降維?

PCA?

二、 構建并評價聚類模型

(一)、使用sklearn估計器構建聚類模型

?(二)、使用sklearn轉換器進行數據預處理與降維

TSNE類

(三)、評價聚類模型


一、使用sklearn轉換器處理數據

(一)、加載datasets模塊中的數據集

sklearn庫的datasets模塊集成了部分數據分析的經典數據集,讀者可以使用這些數據集進行數據預處理、建 模等操作,以及熟悉sklearn的數據處理流程和建模流程。

datasets模塊常用數據集的加載函數及其解釋,如下表所示。

使用sklearn進行數據預處理需要用到sklearn提供的統一接口——轉換器(Transformer)。

如果需要加載某個數據集,那么可以將對應的函數賦值給某個變量。加載diabetes數據集,如以下代碼

?

(二)、將數據集劃分為訓練集和測試集?

?train_test_spli

?在sklearn的model_selection模塊中提供了train_test_split函數,可實現對數據集進行拆分,train_test_split函數 的基本使用格式如下。

sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)

train_test_split函數是最常用的數據劃分方法,在model_selection模塊中還提供了其他數據集劃分的函數,如PredefinedSplit函數、ShuffleSplit函數等。讀者可以通過查看官方文檔學習其使用方法。?

數值型數據類型

說明

*arrays

接收list、numpy數組、scipy-sparse矩陣、Pandas數據幀。表示需要劃分的數據集。若為分類回歸,則分別傳入數據和標簽;若為聚類,則傳入數據。無默認值

test_size

接收float、int。表示測試集的大小。若傳入為float型參數值,則應介于0~1之間,表示測試集在總數據集中的占比;若傳入為int型參數值,則表示測試樣本的絕對數量。默認為None

train_size

接收float、int。表示訓練集的大小,傳入的參數值說明與test_size參數的參數值說明相似。默認為None

random_state

接收int。表示用于隨機抽樣的偽隨機數發生器的狀態。默認為None

shuffle

接收bool。表示在拆分數據集前是否對數據進行混洗。默認為True

stratify

接收array。表示用于保持拆分前類的分布平衡。默認為None

?train_test_split函數可分別將傳入的數據集劃分為訓練集和測試集。

如果傳入的是一組數據集,那么生成的就是這一組數據集隨機劃分后的訓練集和測試集,總共兩組。

如果傳入的是兩組數據集,則生成的訓練集和測試集分別兩組,總共4組。

將breast_cancer數據集劃分為訓練集和測試集,如以下代碼。

(三)、使用sklearn轉換器進行數據預處理與降維?

為了幫助用戶實現大量的特征處理相關操作,sklearn將相關的功能封裝為轉換器。 轉換器主要包括3個方法:fit()、transform()和fit_transform()。轉換器的3種方法及其說明如下表所示。

方法名稱

方法說明

fit()

主要通過分析特征和目標值提取有價值的信息,這些信息可以是統計量、權值系數等。fit()?方法用于從數據中學習參數,不進行實際的數據轉換。

transform()

主要用于對特征進行轉換。transform()?方法使用已經學習到的參數對數據進行轉換,因此在調用?transform()?之前必須先調用?fit()。

fit_transform()

即先調用fit()方法,然后調用transform()方法

sklearn除了提供離差標準化函數MinMaxScaler外,還提供了一系列數據預處理函數,如下表所示。

函數名稱

函數說明

StandardScaler

對特征進行標準差標準化

Normalizer

對特征進行歸一化

Binarizer

對定量特征進行二值化處理

OneHotEncoder

對定性特征進行獨熱編碼處理

FunctionTransformer

對特征進行自定義函數變換

PCA?

sklearn除了提供基本的特征變換函數外,還提供了降維算法、特征選擇算法,這些算法的使用也是通過轉換器的方式進行的。

sklearn的decomposition模塊中提供了PCA類,可實現對數據集進行PCA降維,PCA類的基本使用格式如下。?

?class sklearn.decomposition.PCA(n_components=None, *, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)

參數名稱

參數說明

n_components

接收int、float、'mle'。表示降維后要保留的特征緯度數目。若未指定參數值,則表示所有特征均會被保留下來;若傳入為int型參數值,則表示將原始數據降低到n個維度;若傳入為float型參數值,則將根據樣本特征方差來決定降維后的維度數;若賦值為“mle”,則將會使用MLE算法來根據特征的方差分布情況自動選擇一定數量的主成分特征來降維。默認為None

copy

接收bool。表示是否在運行算法時將原始訓練數據進行復制。若為True,則運行算法后原始訓練數據的值不會有任何改變;若為False,則運行算法后原始訓練數據的值將會發生改變。默認為True

whiten

接收bool。表示對降維后的特征進行標準化處理,使得具有相同的方差。默認為False

svd_solver

接收str。表示使用的SVD算法,可選randomized、full、arpack、auto。randomized一般適用于數據量大,數據維度多,同時主成分數目比例又較低的PCA降維。full是使用SciPy庫實現的傳統SVD算法。arpack和randomized的適用場景類似,區別在于,randomized使用的是sklearn自己的SVD實現,而arpack直接使用了SciPy庫的sparse?SVD實現。auto則代表PCA類會自動在上述3種算法中去權衡,選擇一個合適的SVD算法來降維。默認為auto

二、 構建并評價聚類模型

(一)、使用sklearn估計器構建聚類模型

聚類的輸入是一組未被標記的樣本,聚類根據數據自身的距離或相似度將它們劃分為若干組,劃分的原則是組內(內部)距離最小化,而組間(外部)距離最大化,如圖所示。

常用的聚類算法及其類別如下表所示。

算法類別

包括的主要算法

劃分(分裂)方法

K-Means算法(K-平均)、K-MEDOIDS算法(K-中心點)和CLARANS算法(基于選擇的算法)

層次分析方法

BIRCH算法(平衡迭代規約和聚類)、CURE算法(代表點聚類)和CHAMELEON算法(動態模型)

基于密度的方法

DBSCAN算法(基于高密度連接區域)、DENCLUE算法(密度分布函數)和OPTICS算法(對象排序識別)

基于網格的方法

STING算法(統計信息網絡)、CLIOUE算法(聚類高維空間)和WAVE-CLUSTER算法(小波變換)

?sklearn常用的聚類算法模塊cluster提供的聚類算法及其適用范圍如下表所示。

算法名稱

參數

適用范圍

距離度量

K-Means

簇數

可用于樣本數目很大、聚類數目中等的場景

點之間的距離

Spectral?clustering

簇數

可用于樣本數目中等、聚類數目較小的場景

圖距離

Ward?hierarchical?clustering

簇數

可用于樣本數目較大、聚類數目較大的場景

點之間的距離

Agglomerative?clustering

簇數、鏈接類型、距離

可用于樣本數目較大、聚類數目較大的場景

任意成對點線圖間的距離

聚類算法模塊cluster提供的聚類算法及其適用范圍續表。

算法名稱

參數

適用范圍

距離度量

DBSCAN

半徑大小、最低成員數目

可用于樣本數目很大、聚類數目中等的場景

最近的點之間的距離

Birch

分支因子、閾值、可選全局集群

可用于樣本數目很大、聚類數目較大的場景

點之間的歐式距離

聚類算法實現需要使用sklearn估計器(estimator)。

sklearn估計器擁有fit()和predict()兩個方法,其說明如下表所示。

方法名稱

方法說明

fit()

fit()方法主要用于訓練算法。該方法可接收用于有監督學習的訓練集及其標簽兩個參數,也可以接收用于無監督學習的數據

predict()

predict()方法用于預測有監督學習的測試集標簽,亦可以用于劃分傳入數據的類別

?(二)、使用sklearn轉換器進行數據預處理與降維

TSNE類

使用customer數據集,通過sklearn估計器構建K-Means聚類模型,對客戶群體進行劃分。

并使用sklearn的manifold模塊中的TSNE類可實現多維數據的可視化展現功能,查看聚類效果,TSNE類的基本使用格式如下。

class sklearn.manifold.TSNE(n_components=2, *, perplexity=30.0, early_exaggeration=12.0, learning_rate=200.0, n_iter=1000, n_iter_without_progress=300, min_grad_norm=1e-07, metric='euclidean', init='random', verbose=0, random_state=None, method='barnes_hut', angle=0.5, n_jobs=None, square_distances='legacy')

import pandas as pd
from sklearn.manifold import TSNE
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 讀取數據集
filepath = 'D:\Desktop\data\customer.csv'
customer = pd.read_csv(filepath, encoding='gbk')
customer_data = customer.iloc[:, :-1]
customer_target = customer.iloc[:, -1]
# Kmeans聚類
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=6,random_state=6).fit(customer_data)
# 使用TSNE進行數據降維,降成兩維
tsne = TSNE(n_components=2, init='random',random_state=2).fit(customer_data)
df = pd.DataFrame(tsne.embedding_)  # 將原始數據轉
df['labels'] = kmeans.labels_  # 將聚類結果存儲進df
# 提取不同標簽的數據
df1 = df[df['labels'] == 0]
df2 = df[df['labels'] == 1]
df3 = df[df['labels'] == 2]
df4 = df[df['labels'] == 3]
df5 = df[df['labels'] == 4]
df6 = df[df['labels'] == 5]# 繪制圖形
fig = plt.figure(figsize=(9, 6))  # 設定空白畫布,為
# 用不同的顏色表示不同數據
plt.plot(df1[0], df1[1], 'bo', df2[0], df2[1], 'r*',df3[0], df3[1], 'gD', df4[0], df4[1], 'kD',df5[0], df5[1], 'ms', df6[0], df6[1], 'co' )
plt.show()  # 顯示圖片

(三)、評價聚類模型

除了輪廓系數評價法以外的評價方法,在不考慮業務場景的情況下都是得分越高,其效果越好,最高分值為1。

而輪廓系數評價法則需要判斷不同類別數目情況下的輪廓系數的走勢,尋找最優的聚類數目。

綜合以上聚類評價方法,在真實值作為參考的情況下,幾種方法均可以很好地評估聚類模型。

在沒有真實值作為參考的時候,輪廓系數評價法和Calinski-Harabasz指數評價法可以結合使用。?

from sklearn.metrics import fowlkes_mallows_score
for i in range(1, 7):# 構建并訓練模型kmeans = KMeans(n_clusters=i, random_state=6).fit(customer_data) score = fowlkes_mallows_score(customer_target, kmeans.labels_)print('customer數據聚%d類FMI評價分值為:%f' % (i, score))from sklearn.metrics import silhouette_score
silhouettteScore = []
for i in range(2, 10):# 構建并訓練模型kmeans = KMeans(n_clusters=i,random_state=6).fit(customer_data) score = silhouette_score(customer_data, kmeans.labels_)silhouettteScore.append(score)
plt.figure(figsize=(10, 6))
plt.plot(range(2, 10), silhouettteScore,
linewidth=1.5, linestyle='-')plt.show()

?

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

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

相關文章

【Tomcat】Tomcat端口僅允許本地訪問設置方法

要設置Tomcat端口僅允許本地訪問&#xff0c;可以通過以下兩種主要方式實現&#xff1a; 方法一&#xff1a;修改Tomcat配置文件&#xff08;推薦&#xff09; 修改 server.xml 文件 打開Tomcat的配置文件 conf/server.xml&#xff0c;找到 <Connector> 標簽&#xff08;…

arcgis字段計算器中計算矢量面的每個點坐標

python腳本 函數 def ExportCoordinates(feat):coors = []partnum = 0partcount = feat.partCountwhile partnum < partcount:part = feat.getPart(partnum)pnt = part.next()while pnt:coors.append("({}, {})".format(pnt.X,pnt.Y))pnt = part.next()if not p…

企業級AI開啟落地戰,得場景者得天下

文&#xff5c;白 鴿 編&#xff5c;王一粟 這兩周&#xff0c;企業級智能體開發平臺頗有你方唱罷我方登臺的架勢。 微軟、騰訊、網易等國內外巨頭&#xff0c;近期都相繼宣布推出了新一代智能體開發平臺。相比于兩年前&#xff0c;智能體開發的產品邏輯已經有了翻天覆地的變…

探索C++標準模板庫(STL):String接口實踐+底層的模擬實現(中篇)

前引&#xff1a;上一篇文章小編已經整理出了String的常用接口&#xff0c;梳理了各個接口的功能、參數&#xff0c;如何使用等各種實例。本篇文章將帶大家看看String這些接口的實踐使用&#xff0c;探索這些接口的實用性&#xff0c;是如何增加代碼效率的。在本篇文章的末尾&a…

【模型顯著性分析】配對樣本 t 檢驗

寫在前面&#xff1a;本博客僅作記錄學習之用&#xff0c;部分圖片來自網絡&#xff0c;如需引用請注明出處&#xff0c;同時如有侵犯您的權益&#xff0c;請聯系刪除&#xff01; 文章目錄 前言 t t t 檢驗配對樣本 t t t 檢驗&#xff08;適用于相關組&#xff09;代碼論文描…

商旅平臺排名:十大商旅服務平臺解析

商旅平臺排名&#xff1a;十大商旅服務平臺解析 在企業降本增效的關鍵轉型期&#xff0c;商旅管理正成為優化運營成本與提升管理效能的核心場景。如何在保障出行體驗的同時實現差旅成本精細化管控、管理流程智能化&#xff0c;成為越來越多企業的戰略焦點。隨著AI技術在數據洞…

題海拾貝:P1208 [USACO1.3] 混合牛奶 Mixing Milk

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》、《C修煉之路》 歡迎點贊&#xff0c;關注&am…

每天掌握一個Linux命令 - ab(Apache Benchmark)

Linux 命令工具 ab 使用指南 一、工具概述 ab&#xff08;Apache Benchmark&#xff09; 是 Apache 官方提供的開源壓力測試工具&#xff0c;用于衡量 Web 服務器的性能。它通過模擬多并發請求&#xff0c;測試服務器在高負載下的響應速度、吞吐量和穩定性&#xff0c;常用于…

AI的“空間盲癥“

<------最重要的是訂閱“魯班模錘”------> 當我們看到一張照片時&#xff0c;大腦會自動分析其中的空間關系——哪個物體在前&#xff0c;哪個在后&#xff0c;左邊是什么&#xff0c;右邊是什么。但對于當今最先進的AI系統來說&#xff0c;這種看似簡單的空間理解卻是…

數據擬合實驗

實驗類型&#xff1a;●驗證性實驗 ○綜合性實驗 ○設計性實驗 實驗目的: 進一步熟練掌握最小二乘多項式擬合算法&#xff0c;提高編程能力和解決擬合問題的實踐技能。 實驗內容&#xff1a; 1 對下列數據&#xff0c;求解最小二乘拋物線f(x)Ax2BxC x -3 -1 1 3 y 15 5 …

系統思考:心智模式與業務創新

在最近的項目交付討論中&#xff0c;我頻繁聽到一個詞&#xff1a;“缺合適的人”。這讓我陷入了深思&#xff1a;我們是否還在傳統的生產力概念&#xff1f;納瓦爾提出的三種杠桿&#xff1a;勞動力、資本、零邊際成本產品。在當今這個信息化、全球化的商業世界中&#xff0c;…

python分步合并處理excel數據

文章目錄 概要整體架構流程技術名詞解釋技術細節小結概要 客戶需求 1. 背景與目標 用戶需要將三個包含農業實驗數據的Excel表格(AK、AN、AP)合并為一個結構化數據集,用于后續分析。每個表格包含相同類型的字段(如對照組與PSB處理組的樣本數、均值、標準差),但需通過字…

Python爬蟲實戰:研究PyQuery庫相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網的快速發展,網絡上的數據量呈爆炸式增長。如何高效地從海量的網頁數據中提取有價值的信息,成為當前信息技術領域的一個重要研究方向。網絡爬蟲作為一種自動獲取網頁內容的程序,能夠按照一定的規則,自動地抓取萬維網信息,在搜索引擎…

深度學習---注意力機制(Attention Mechanism)

一、核心概念與發展背景 注意力機制是深度學習中模擬人類注意力選擇能力的關鍵技術&#xff0c;旨在從海量信息中篩選關鍵特征&#xff0c;解決長序列信息處理中的瓶頸問題&#xff08;如RNN的梯度消失&#xff09;。其核心思想是&#xff1a;對輸入序列的不同部分分配不同權重…

Jenkins分配對應項目權限與用戶管理

在日常開發過程中經常會出現用戶和權限管理問題&#xff0c;沒有配置trigger時&#xff0c;通常需要我們手動構建&#xff0c;但此時前端和后端的朋友沒有build權限&#xff0c;導致每次dev環境測試都需要麻煩我們手動去構建&#xff0c;消息傳達不及時則會降低開發效率。 現有…

XCTF-web-file_include

解析 <?php highlight_file(__FILE__); // 高亮顯示當前PHP文件源代碼 include("./check.php"); // 包含檢查文件&#xff08;可能包含安全過濾邏輯&#xff09;if(isset($_GET[filename])) { // 檢查是否傳入filename參數$filename $_GET[f…

matlab全息技術中的菲涅爾仿真成像

matlab全息技術中的菲涅爾仿真成像程序。 傅里葉法&#xff08;重建距離得大&#xff09;/Fresnel.m , 545 傅里葉法&#xff08;重建距離得大&#xff09;/FresnelB.m , 548 傅里葉法&#xff08;重建距離得大&#xff09;/Fresnel_solution.m , 1643 傅里葉法&#xff08;重…

CS144 - LAB0

CS144 - Lab 0 telnet 發送請求 如圖&#xff0c;很簡單&#xff0c;但是注意輸入時間太久會超時 發郵箱 首先我們需要用命令行去發郵箱&#xff0c;這里我用企業微信郵箱給自己的 qq 郵箱發送~ 整個命令如下&#xff01; 對于其中的參數&#xff0c;其實從英文就可以看出來…

kafka SASL/PLAIN 認證及 ACL 權限控制

一、Zookeeper 配置 SASL/PLAIN 認證&#xff08;每個zookeeper節點都要做&#xff09; 1.1 在 zookeeper 的 conf 目錄下&#xff0c;創建 zk_server_jaas.conf 文件&#xff0c;內容如下 Server {org.apache.kafka.common.security.plain.PlainLoginModule requiredusernam…

20250528-C#知識:函數簡介及函數重載

C#知識&#xff1a;函數簡介及函數重載 本文主要介紹函數參數和函數重載相關的知識點 1、函數 函數一般寫在類中 一般函數調用 static int Add(int num, int value){num value;return num;}//一般函數調用&#xff0c;發生值類型參數的復制int num 1;Add(num, 1); //調用…