【pyspark學習從入門到精通23】機器學習庫_6

目錄

分割連續變量

標準化連續變量

分類


分割連續變量

我們經常處理高度非線性的連續特征,而且只用一個系數很難擬合到我們的模型中。
在這種情況下,可能很難只通過一個系數來解釋這樣一個特征與目標之間的關系。有時,將值劃分到離散的桶中是有用的。

首先,讓我們使用以下代碼創建一些偽造數據:

import numpy as np
x = np.arange(0, 100)
x = x / 100.0 * np.pi * 4
y = x * np.sin(x / 1.764) + 20.1234

現在,我們可以通過以下代碼創建一個 DataFrame:

schema = typ.StructType([typ.StructField('continuous_var', typ.DoubleType(), False)
])
data = spark.createDataFrame([[float(e), ] for e in y], schema=schema)

接下來,我們將使用 QuantileDiscretizer 模型將我們的連續變量分割成五個桶(numBuckets 參數):

discretizer = ft.QuantileDiscretizer(numBuckets=5, inputCol='continuous_var', outputCol='discretized')

讓我們看看我們得到了什么:

data_discretized = discretizer.fit(data).transform(data)

我們的函數現在看起來如下:

現在我們可以將這個變量當作分類變量,并使用 OneHotEncoder 進行編碼,以便將來使用。

標準化連續變量

標準化連續變量不僅有助于更好地理解特征之間的關系(因為解釋系數變得更容易),而且還有助于計算效率,并防止陷入一些數值陷阱。以下是如何在 PySpark ML 中進行操作。

首先,我們需要創建我們的連續變量的向量表示(因為它只是一個單獨的浮點數):

vectorizer = ft.VectorAssembler(inputCols=['continuous_var'], outputCol= 'continuous_vec')

接下來,我們構建我們的標準化器和管道。通過將 withMean 和 withStd 設置為 True,該方法將去除均值,并將方差縮放到單位長度:

normalizer = ft.StandardScaler(inputCol=vectorizer.getOutputCol(), outputCol='normalized', withMean=True,withStd=True
)
pipeline = Pipeline(stages=[vectorizer, normalizer])
data_standardized = pipeline.fit(data).transform(data)

這是轉換后的數據的樣子:

如你所見,數據現在圍繞 0 振蕩,具有單位方差(綠線)。

分類

到目前為止,我們只使用了 PySpark ML 中的 LogisticRegression 模型。在這一部分,我們將使用 RandomForestClassifier 再次模擬嬰兒的生存機會。

在我們可以做到這一點之前,我們需要將標簽特征轉換為 DoubleType:

import pyspark.sql.functions as func
births = births.withColumn('INFANT_ALIVE_AT_REPORT', func.col('INFANT_ALIVE_AT_REPORT').cast(typ.DoubleType())
)
births_train, births_test = births \.randomSplit([0.7, 0.3], seed=666)

現在我們已經將標簽轉換為雙精度,我們準備構建我們的模型。我們以與之前類似的方式進行,區別是我們將重用本章早期的編碼器和 featureCreator。numTrees 參數指定應該有多少決策樹在我們的隨機森林中,maxDepth 參數限制了樹的深度:

classifier = cl.RandomForestClassifier(numTrees=5, maxDepth=5, labelCol='INFANT_ALIVE_AT_REPORT')
pipeline = Pipeline(stages=[encoder,featuresCreator, classifier])
model = pipeline.fit(births_train)
test = model.transform(births_test)

現在讓我們來看看 RandomForestClassifier 模型與 LogisticRegression 模型相比表現如何:

evaluator = ev.BinaryClassificationEvaluator(labelCol='INFANT_ALIVE_AT_REPORT')
print(evaluator.evaluate(test, {evaluator.metricName: "areaUnderROC"}))
print(evaluator.evaluate(test, {evaluator.metricName: "areaUnderPR"}))

我們得到以下結果:

嗯,正如你看到的,結果比邏輯回歸模型好大約 3 個百分點。讓我們測試一下單棵樹的模型表現如何:

classifier = cl.DecisionTreeClassifier(maxDepth=5, labelCol='INFANT_ALIVE_AT_REPORT')
pipeline = Pipeline(stages=[encoder,featuresCreator, classifier])
model = pipeline.fit(births_train)
test = model.transform(births_test)
evaluator = ev.BinaryClassificationEvaluator(labelCol='INFANT_ALIVE_AT_REPORT')
print(evaluator.evaluate(test, {evaluator.metricName: "areaUnderROC"}))
print(evaluator.evaluate(test, {evaluator.metricName: "areaUnderPR"}))

前面的代碼給出了以下結果:

一點也不差!實際上,在精確度-召回率關系方面,它的表現比隨機森林模型更好,而且在 ROC 下面積方面只是稍微差一些。我們可能剛剛發現了一個贏家!
?

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

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

相關文章

解密時序數據庫的未來:TDengine Open Day技術沙龍精彩回顧

在數字化時代,開源已成為推動技術創新和知識共享的核心力量,尤其在數據領域,開源技術的涌現不僅促進了行業的快速發展,也讓更多的開發者和技術愛好者得以參與其中。隨著物聯網、工業互聯網等技術的廣泛應用,時序數據庫…

QT 使用共享內存 實現進程間通訊

QSharedMemory:如果兩個進程運行在同一臺機器上,且對性能要求非常高(如實時數據共享、圖像渲染等),建議使用共享內存。 優點: 高性能: 共享內存是進程間通信的最快方式之一,因為數…

在Scala中對隱式轉換格式與作用

隱式對象 格式:implicit object 作用:給函數的默認參數提供隱式值 object Scala12______10 { // case class DataBase(driver: String, url: String) // // implicit object mySql extends DataBase("mysql", "localhost:300") //…

go build command

文章目錄 1.簡介2.格式3.選項4.示例5.小結參考文獻 1.簡介 go build 是 Go 語言工具鏈中的一個命令,它用于編譯 Go 源代碼并生成可執行文件。 2.格式 go build [-o output] [build flags] [packages]可選的 -o 選項強制 build 將生成的可執行文件或對象寫入指定的…

OpenCV實驗:圖片加水印

第二篇:圖片添加水印(加 logo) 1. 實驗原理 水印原理: 圖片添加水印是圖像疊加的一種應用,分為透明水印和不透明水印。水印的實現通常依賴于像素值操作,將水印圖片融合到目標圖片中,常用的方法…

WinDbg 中使用 !process 命令

PROCESS 81a979d0 SessionId: 0 Cid: 0210 Peb: 7ffda000 ParentCid: 063cDirBase: 145b9000 ObjectTable: e12fed70 HandleCount: 53.Image: Dbgview.exe 1. PROCESS 81a979d0 意義:PROCESS 是該進程對象的內核地址。用途:可以使用這個地址獲…

深入解析下oracle的number底層存儲格式

oracle數據庫中,number數據類型用來存儲數值數據,它既可以存儲負數數值,也可以存儲正數數值。相對于其他類型數據,number格式的數據底層存儲格式要復雜得多。今天我們就詳細探究下oracle的number底層存儲格式。 一、環境搭建 1.…

SparkSQL與Hive的整合

文章目錄 SparkSQL與Hive的整合1.1. Spark On Hive1.1.1. Hive的準備工作1.1.2. Spark的準備工作1.1.3. Spark代碼開發1.1.4. Spark On Hive案例 1.2. Hive On Spark1.3. SparkSQL命令行1.4. SparkSQL分布式查詢引擎1.4.1. 開啟ThriftServer服務1.4.2. beeline連接ThriftServer…

(持續更新)linux網絡編程中需要注意的內核參數與網絡機制

目錄 零、基本說明 一、內核參數 二、相關機制 1、GRO (1)適用場景 (2)優缺點 (3)相關操作 2、Nagle 算法 (1)基本規則 (2)優缺點 (3&…

DevExpress WPF中文教程:Grid - 如何移動和調整列大小?(一)

DevExpress WPF擁有120個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

Matlab筆記---clear、clc、clear all應用

在MATLAB中,clear、clc 和 clear all 是三個常用的命令,它們各自有不同的作用: clc: clc 命令用于清除MATLAB命令窗口中的所有輸出。它不會刪除任何變量、函數或文件,只是清除屏幕上的顯示內容,讓你可以更…

銘記一次項目重大事故

在程序的世界里,bug 就像隱藏在暗處的小怪獸,時不時跳出來搗亂。而職業生涯中,總有那么一個或幾個 bug 讓我們刻骨銘心。它或許讓項目差點夭折,或許讓你熬了無數個通宵,或許有著離奇的出現方式和曲折的解決過程。無論是…

Qt 一個簡單的QChart 繪圖

Qt 一個簡單的QChart 繪圖 先上程序運行結果圖&#xff1a; “sample9_1QChart.h” 文件代碼如下&#xff1a; #pragma once#include <QtWidgets/QMainWindow> #include "ui_sample9_1QChart.h"#include <QtCharts> //必須這么設置 QT_CHARTS_USE_NAME…

分布式事物XA、BASE、TCC、SAGA、AT

分布式事務——Seata 一、Seata的架構&#xff1a; 1、什么是Seata&#xff1a; 它是一款分布式事務解決方案。官網查看&#xff1a;Seata 2.執行過程 在分布式事務中&#xff0c;會有一個入口方法去調用各個微服務&#xff0c;每一個微服務都有一個分支事務&#xff0c;因…

MySQL為什么使用B+樹來作索引

我來詳細解釋一下B樹的結構和特點。 graph TDA[根節點 40|70] --> B[20|30]A --> C[50|60]A --> D[80|90]B --> E[10|15]B --> F[25|28]B --> G[35|38]C --> H[45|48]C --> I[55|58]C --> J[65|68]D --> K[75|78]D --> L[85|88]D --> M[9…

python 下載 b站視頻 和音頻

video_bvid&#xff1a; import os import requests import json import re from bs4 import BeautifulSoup import subprocess # from detail_video import video_bvid# video_bvid 是一個從外部得到的單個視頻ID video_bvid BV1cx421Q7veclass BilibiliVideoAudio:def __in…

2024年06月中國電子學會青少年軟件編程(Python)等級考試試卷(五級)答案 + 解析

青少年軟件編程(python)等級考試試卷(五級) 一、單選題(共25題,共50分) range()函數的基本用法是什么?( ) A. 生成一個等差數列 B. 生成一個隨機數列 C. 生成一個遞增數列 D. 生成一個遞減數列 正確答案:A 答案解析:range() 函數用于生成一個等差數列,其中起始值、…

以太網鏈路詳情

文章目錄 1、交換機1、常見的概念1、沖突域2、廣播域3、以太網卡1、以太網卡幀 4、mac地址1、mac地址表示2、mac地址分類3、mac地址轉換為二進制 2、交換機的工作原理1、mac地址表2、交換機三種數據幀處理行為3、為什么會泛洪4、轉發5、丟棄 3、mac表怎么獲得4、同網段數據通信…

Shell編程 腳本的運行方式與注釋

目錄 shell腳本的運行方式 1. 路徑運行 2.bash或sh加腳本運行 ?編輯 3.source在加腳本路徑運行 shell腳本注釋 單行注釋 多行注釋 shell腳本的運行方式 我們在/usr/etc/demo01目錄下新建了一個腳本 a.sh &#xff0c;腳本內容是要求輸出數字1&#xff0c;怎么運行呢 1…

獲取淘寶商品評論數據的API應用:市場調研|產品更新|用戶數據

下面是一段我用item_review&#xff08;獲取商品評論數據&#xff09;抓來的商品評論數據&#xff1a; "items": {"total_results": 375,"totalpage": 38,"page_size": 10,"page": "1","item": [{&quo…