Rumah > pembangunan bahagian belakang > Tutorial Python > Penjelasan terperinci tentang tiga kaedah penghuraian parameter dalam Python

Penjelasan terperinci tentang tiga kaedah penghuraian parameter dalam Python

WBOY
Lepaskan: 2022-07-20 14:22:22
ke hadapan
3060 orang telah melayarinya

Artikel ini membawakan anda pengetahuan yang berkaitan tentang Python terutamanya mengatur isu yang berkaitan dengan tiga kaedah penghuraian parameter Pilihan pertama ialah menggunakan argparse, iaitu modul Python yang popular, khusus digunakan untuk baris arahan parsing; kaedah lain ialah membaca fail JSON, di mana kita boleh meletakkan semua hiperparameter kaedah yang ketiga dan kurang diketahui adalah dengan menggunakan fail YAML. Saya harap ia akan membantu.

Penjelasan terperinci tentang tiga kaedah penghuraian parameter dalam Python

[Cadangan berkaitan: Tutorial video Python3 ]

Tujuan utama apa yang kami kongsikan hari ini adalah untuk menggunakan baris arahan dan Fail konfigurasi untuk meningkatkan kecekapan kod

Jom!

Kami menggunakan proses pelarasan parameter dalam pembelajaran mesin untuk berlatih. Pilihan pertama adalah menggunakan argparse, yang merupakan modul Python yang popular khusus untuk menghurai baris arahan yang lain adalah untuk membaca fail JSON di mana kita boleh meletakkan semua hyperparameters juga kurang diketahui Penyelesaiannya adalah dengan menggunakan fail YAML; Ingin tahu, mari mulakan!

Prasyarat

Dalam kod di bawah, saya akan menggunakan Kod Visual Studio, persekitaran pembangunan Python bersepadu yang sangat cekap. Keindahan alat ini ialah ia menyokong setiap bahasa pengaturcaraan dengan memasang sambungan, menyepadukan terminal dan membolehkan bekerja dengan sejumlah besar skrip Python dan set data

set data pada masa yang sama, menggunakan Set Data Basikal Kongsi pada Kaggle

Gunakan argparse

Penjelasan terperinci tentang tiga kaedah penghuraian parameter dalam Python
Seperti yang ditunjukkan dalam gambar di atas, kami mempunyai struktur standard untuk mengatur projek kecil kami:

  • mengandungi data kami Set a folder bernama data
  • fail train.py
  • fail option.py untuk menentukan hiperparameter

Pertama, kita boleh mencipta fail train.py, di mana kita mempunyai program asas untuk mengimport data, melatih model pada data latihan dan menilainya pada set ujian:

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, mean_absolute_error

from options import train_options

df = pd.read_csv('data\hour.csv')
print(df.head())
opt = train_options()

X=df.drop(['instant','dteday','atemp','casual','registered','cnt'],axis=1).values
y =df['cnt'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

if opt.normalize == True:
    scaler = StandardScaler()
    X = scaler.fit_transform(X)
    
rf = RandomForestRegressor(n_estimators=opt.n_estimators,max_features=opt.max_features,max_depth=opt.max_depth)
model = rf.fit(X_train,y_train)
y_pred = model.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_pred, y_test))
mae = mean_absolute_error(y_pred, y_test)
print("rmse: ",rmse)
print("mae: ",mae)
Salin selepas log masuk

Dalam kod, kami juga mengimport pilihan yang disertakan dalam Fungsi train_options dalam .py fail. Fail terakhir ialah fail Python yang daripadanya kita boleh menukar hiperparameter yang dipertimbangkan dalam train.py:

import argparse

def train_options():
    parser = argparse.ArgumentParser()
    parser.add_argument("--normalize", default=True, type=bool, help='maximum depth')
    parser.add_argument("--n_estimators", default=100, type=int, help='number of estimators')
    parser.add_argument("--max_features", default=6, type=int, help='maximum of features',)
    parser.add_argument("--max_depth", default=5, type=int,help='maximum depth')
    opt = parser.parse_args()
    return opt
Salin selepas log masuk

Dalam contoh ini kita menggunakan perpustakaan argparse, yang sangat popular apabila menghuraikan argumen baris arahan . Mula-mula, kita memulakan penghurai, kemudian, kita boleh menambah parameter yang ingin kita akses.

Berikut ialah contoh kod berjalan:

python train.py
Salin selepas log masuk

Penjelasan terperinci tentang tiga kaedah penghuraian parameter dalam Python
Untuk menukar nilai lalai hiperparameter, terdapat dua cara. Pilihan pertama ialah menetapkan nilai lalai yang berbeza dalam fail options.py. Pilihan lain ialah menghantar nilai hiperparameter daripada baris arahan:

python train.py --n_estimators 200
Salin selepas log masuk

Kita perlu menentukan nama hiperparameter yang ingin kita ubah dan nilai yang sepadan.

python train.py --n_estimators 200 --max_depth 7
Salin selepas log masuk

Menggunakan fail JSON

Penjelasan terperinci tentang tiga kaedah penghuraian parameter dalam Python
Seperti sebelum ini, kami boleh menyimpan struktur fail yang serupa. Dalam kes ini, kami menggantikan fail options.py dengan fail JSON. Dalam erti kata lain, kami ingin menentukan nilai hiperparameter dalam fail JSON dan menghantarnya ke fail train.py. Fail JSON boleh menjadi alternatif yang pantas dan intuitif kepada perpustakaan argparse, memanfaatkan pasangan nilai kunci untuk menyimpan data. Seterusnya kami mencipta fail options.json yang mengandungi data yang perlu kami hantar ke kod lain kemudian.

{
"normalize":true,
"n_estimators":100,
"max_features":6,
"max_depth":5 
}
Salin selepas log masuk

Seperti yang anda lihat di atas, ia sangat serupa dengan kamus Python. Tetapi tidak seperti kamus, ia mengandungi data dalam format teks/rentetan. Selain itu, terdapat beberapa jenis data biasa dengan sintaks yang sedikit berbeza. Sebagai contoh, nilai Boolean adalah palsu/benar, manakala Python mengiktiraf False/True. Nilai lain yang mungkin dalam JSON ialah tatasusunan, yang diwakili sebagai senarai Python menggunakan kurungan segi empat sama.

Keindahan bekerja dengan data JSON dalam Python ialah ia boleh ditukar menjadi kamus Python melalui kaedah muat:

f = open("options.json", "rb")
parameters = json.load(f)
Salin selepas log masuk

Untuk mengakses item tertentu, kita hanya perlu memetik ia dalam kurungan persegi Nama utamanya:

if parameters["normalize"] == True:
    scaler = StandardScaler()
    X = scaler.fit_transform(X)
rf=RandomForestRegressor(n_estimators=parameters["n_estimators"],max_features=parameters["max_features"],max_depth=parameters["max_depth"],random_state=42)
model = rf.fit(X_train,y_train)
y_pred = model.predict(X_test)
Salin selepas log masuk

Menggunakan fail YAML

Penjelasan terperinci tentang tiga kaedah penghuraian parameter dalam Python
Pilihan terakhir ialah memanfaatkan potensi YAML. Seperti fail JSON, kami membaca fail YAML dalam kod Python sebagai kamus untuk mengakses nilai hiperparameter. YAML ialah bahasa perwakilan data yang boleh dibaca manusia di mana hierarki diwakili menggunakan aksara ruang dua kali bukannya kurungan seperti dalam fail JSON. Di bawah ini kami menunjukkan fail options.yaml yang akan mengandungi:

normalize: True 
n_estimators: 100
max_features: 6
max_depth: 5
Salin selepas log masuk

Dalam train.py, kami membuka fail options.yaml, yang akan sentiasa ditukar kepada kamus Python menggunakan kaedah muat, kali ini daripada Diimport daripada perpustakaan yaml:

import yaml
f = open('options.yaml','rb')
parameters = yaml.load(f, Loader=yaml.FullLoader)
Salin selepas log masuk

Seperti sebelum ini, kita boleh mengakses nilai hiperparameter menggunakan sintaks yang diperlukan oleh kamus.

Fikiran Akhir

Fail konfigurasi disusun dengan sangat cepat, manakala argparse memerlukan menulis baris kod untuk setiap hujah yang ingin kami tambahkan.

Jadi kita harus memilih cara yang paling sesuai mengikut situasi kita yang berbeza

Sebagai contoh, jika kita perlu menambah ulasan pada parameter, JSON tidak sesuai kerana ia tidak membenarkan ulasan, dan YAML dan argparse mungkin sesuai.

[Cadangan berkaitan: Tutorial video Python3]

Atas ialah kandungan terperinci Penjelasan terperinci tentang tiga kaedah penghuraian parameter dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan