„Erkundung des End-to-End-Prozesses des maschinellen Lernprojekts zur Vorhersage des Brandwetterindex“ | von Vishal Shelar | Juni 2023

0
23


Inhaltsverzeichnis :-

· 1. Einleitung :-
·
2. Problemstellung:-
·
3. Datensatzbeschreibung: –
·
4. Datenvorverarbeitung: –
·
5. EDA:-
·
6. Feature-Engineering:-
·
7. Modellschulung und -tests: –
·
8. Modellbereitstellung:-

In diesem Weblog werden wir uns mit einem maschinellen Lernprojekt befassen, das darauf abzielt, den Brandwetterindex anhand eines Datensatzes aus zwei Regionen Algeriens vorherzusagen: Bejaia im Nordosten und Sidi Bel-Abbes im Nordwesten.

Die Vorhersage des Brandwetterindex spielt eine entscheidende Rolle bei der Einschätzung des Risikos und der Schwere potenzieller Waldbrände. Durch die genaue Vorhersage des Brandwetterindex können wir die Bereitschaft verbessern, Schäden minimieren und Leben schützen.

In diesem Weblog werden wir den schrittweisen Prozess eines Finish-to-Finish-Projekts für maschinelles Lernen verstehen. Beginnend mit der Datenvorverarbeitung, bei der wir den Datensatz bereinigen und verfeinern, gehen wir zur Merkmalsauswahl über und extrahieren die einflussreichsten Attribute für unser Vorhersagemodell.

Das Hauptziel dieses Projekts zur Vorhersage des Feuerwetterindex ist die Entwicklung eines Modells für maschinelles Lernen, das den Feuerwetterindex für zwei Regionen in Algerien genau vorhersagen kann: Bejaia im Nordosten und Sidi Bel-Abbes im Nordwesten. Durch das Verständnis historischer Wetter- und Umweltdaten ist es unser Ziel, ein Vorhersagemodell zu erstellen, das in der Lage ist, den Brandwetterindex mit hoher Präzision abzuschätzen.

Der für dieses Projekt zur Vorhersage des Brandwetterindex verwendete Datensatz stammt von Kaggle, einer beliebten Plattform für Datenwissenschafts- und maschinelles Lernbegeisterte.

Der für dieses Projekt zur Vorhersage des Brandwetterindex verwendete Datensatz umfasst insgesamt 244 Fälle und kombiniert Daten aus zwei verschiedenen Regionen Algeriens: Bejaia im Nordosten und Sidi Bel-Abbes im Nordwesten. Jede Area trägt die gleiche Anzahl an Instanzen bei, wobei 122 Instanzen Daten aus jeder Area darstellen.

Die Daten umfassen einen bestimmten Zeitraum, insbesondere von Juni 2012 bis September 2012. Dieser Zeitrahmen ermöglicht die Untersuchung saisonaler Schwankungen der Brandwetterbedingungen und liefert ein umfassendes Verständnis der Dynamik während dieses bestimmten Zeitraums.

Der Datensatz besteht aus 11 Attributen, die verschiedene Umweltfaktoren erfassen, die die Brandwetterbedingungen beeinflussen. Jedes Attribut liefert wertvolle Informationen für die genaue Vorhersage des Brandwetterindex.

Zusätzlich zu den 11 Eingabeattributen gibt es ein Ausgabeattribut, auch Klassenattribut genannt. Die Vorfälle im Datensatz wurden in zwei verschiedene Klassen eingeteilt: Feuer und Nicht-Feuer.

Attributinformationen: –

  1. Datum: (TT/MM/JJJJ) Tag, Monat („Juni“ bis „September“), Jahr (2012) Wetterdatenbeobachtungen
  2. Temperatur: Mittagstemperatur (maximale Temperatur) in Celsiusgraden: 22 bis 42
  3. RH: Relative Luftfeuchtigkeit in %: 21 bis 90
  4. Ws: Windgeschwindigkeit in km/h: 6 bis 29
  5. Regen: Gesamttag in mm: 0 bis 16,8 FWI-Komponenten
  6. Index des Fantastic Gasoline Moisture Code (FFMC) aus dem FWI-System: 28,6 bis 92,5
  7. Duff Moisture Code (DMC)-Index aus dem FWI-System: 1,1 bis 65,9
  8. Dürrecode-Index (DC) aus dem FWI-System: 7 bis 220,4
  9. Index des Preliminary Unfold Index (ISI) aus dem FWI-System: 0 bis 18,5
  10. Buildup Index (BUI)-Index aus dem FWI-System: 1,1 bis 68
  11. Hearth Climate Index (FWI) Index: 0 bis 31,1
  12. Klassen: zwei Klassen, nämlich Feuer und nicht Feuer
# Importing the required libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

# Studying the dataset
dataset=pd.read_csv('D:/Challenge Weblog/Algerian_forest_fires_dataset_UPDATE.csv' ,header=1)

dataset.head()

Ausgang :-

# Der Datensatz wird basierend auf der Area ab dem 122. Index in zwei Sätze konvertiert. Wir können eine neue Spalte basierend auf der Area erstellen

1: „Datensatz der Area Bejaia“

2: „Datensatz der Area Sidi-Bel Abbes“

dataset.loc[:122,"Region"]=0
dataset.loc[122:,"Region"]=1
df=dataset
df.head()

Ausgang :-

# Auf Nullwerte prüfen:-

df.isnull().sum()

Ausgang :-

# Nullwerte entfernen :-

df=df.dropna().reset_index(drop=True)

Ausgang :-

df.iloc[[122]]

Ausgang :-

# Entfernen der 122. Zeile, da diese datentechnisch irrelevant ist

#take away the 122nd row
df=df.drop(122).reset_index(drop=True)
df.iloc[[122]]

Ausgang :-

df.columns

Ausgang :-

# Leerzeichen in den Spaltennamen korrigieren :-

## repair areas in columns names
df.columns=df.columns.str.strip()
df.columns

Ausgang :-

# Überprüfen des Datentyps von Spalten: –

df.data()

Ausgang :-

# Ändert die erforderlichen Spalten als Ganzzahl-Datentyp:-

df[['month','day','year','Temperature','RH','Ws','Region']]=df[['month','day','year','Temperature','RH','Ws','Region']].astype(int)
df.data()

Ausgang :-

# Die anderen Spalten in den Datentyp „Float-Daten“ ändern:-

objects=[features for features in df.columns if df[features].dtypes=='O']
objects

Ausgang :-

for i in objects:
if i!='Courses':
df[i]=df[i].astype(float)

df.data()

Ausgang :-

df.head()

Ausgang :-

Speichern wir den bereinigten Datensatz: –

## Let save the cleaned dataset
df.to_csv('Algerian_forest_fires_cleanedd_dataset.csv',index=False)
## drop day,month and yr
df_copy=df.drop(['day','month','year'],axis=1)
df_copy.head()

Ausgang :-

# Korrelation:-

df_copy.corr()

Ausgang :-

plt.determine(figsize=(12, 10))
sns.heatmap(df.corr(),annot=True)

Ausgang :-

# Field-Plot :-

## Field Plots
sns.boxplot(df['FWI'],shade='inexperienced')

Ausgang :-

df['Classes']=np.the place(df['Classes'].str.incorporates('not fireplace'),'not fireplace','fireplace')

## Month-to-month Hearth Evaluation for area 1
dftemp=df.loc[df['Region']==1]
plt.subplots(figsize=(13,6))
sns.set_style('whitegrid')
sns.countplot(x='month',hue='Courses',knowledge=df)
plt.ylabel('Variety of Fires',weight='daring')
plt.xlabel('Months',weight='daring')
plt.title("Hearth Evaluation of Sidi- Bel Areas",weight='daring')

Ausgang :-

## Month-to-month Hearth Evaluation for area 2
dftemp=df.loc[df['Region']==0]
plt.subplots(figsize=(13,6))
sns.set_style('whitegrid')
sns.countplot(x='month',hue='Courses',knowledge=df)
plt.ylabel('Variety of Fires',weight='daring')
plt.xlabel('Months',weight='daring')
plt.title("Hearth Evaluation of Brjaia Areas",weight='daring')

Ausgang :-

Überwachung :-

Es wurde beobachtet, dass es in beiden Regionen im August und September die meisten Waldbrände gab. Und aus der obigen Darstellung der Monate können wir nur wenige Dinge verstehen

Die meisten Brände ereigneten sich im August und sehr hohe Brände ereigneten sich in nur drei Monaten – Juni, Juli und August.

Much less Fires warfare im September

# Kodierung:-

## Encoding
df['Classes']=np.the place(df['Classes'].str.incorporates("not fireplace"),0,1)

df.head()

Ausgang :-

# Auswahl :-

## Impartial And dependent options
X=df.drop('FWI',axis=1)
y=df['FWI']

#Practice Take a look at Break up
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=42)

## Function Choice primarily based on correlaltion

def correlation(dataset, threshold):
col_corr = set()
corr_matrix = dataset.corr()
for i in vary(len(corr_matrix.columns)):
for j in vary(i):
if abs(corr_matrix.iloc[i, j]) > threshold:
colname = corr_matrix.columns[i]
col_corr.add(colname)
return col_corr

## threshold--Area experience
corr_features=correlation(X_train,0.85)

corr_features

Ausgang :-

## drop options when correlation is greater than 0.85 
X_train.drop(corr_features,axis=1,inplace=True)
X_test.drop(corr_features,axis=1,inplace=True)

# Skalierung oder Standardisierung:-

from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
X_train_scaled=scaler.fit_transform(X_train)
X_test_scaled=scaler.remodel(X_test)

X_train_scaled

Ausgang :-

# Lineare Regression :-

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
linreg=LinearRegression()
linreg.match(X_train_scaled,y_train)
y_pred=linreg.predict(X_test_scaled)
mae=mean_absolute_error(y_test,y_pred)
rating=r2_score(y_test,y_pred)
print("Imply absolute error", mae)
print("R2 Rating", rating)
plt.scatter(y_test,y_pred)

Ausgang :-

# Ridge-Regression:-

from sklearn.linear_model import Ridge
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
ridge=Ridge()
ridge.match(X_train_scaled,y_train)
y_pred=ridge.predict(X_test_scaled)
mae=mean_absolute_error(y_test,y_pred)
rating=r2_score(y_test,y_pred)
print("Imply absolute error", mae)
print("R2 Rating", rating)
plt.scatter(y_test,y_pred)

Ausgang :-

# Lasso-Regression: –

from sklearn.linear_model import Lasso
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
lasso=Lasso()
lasso.match(X_train_scaled,y_train)
y_pred=lasso.predict(X_test_scaled)
mae=mean_absolute_error(y_test,y_pred)
rating=r2_score(y_test,y_pred)
print("Imply absolute error", mae)
print("R2 Rating", rating)
plt.scatter(y_test,y_pred)

Ausgang :-

Bei meiner Untersuchung verschiedener maschineller Lernmodelle zur Vorhersage des Brandwetterindex zeigten sowohl das lineare Modell als auch das Ridge-Modell eine bemerkenswert hohe Genauigkeit und erreichten eine beeindruckende Genauigkeitsrate von 98,47 % bzw. 98,42 %. Andererseits erreichte das Lasso-Modell eine etwas geringere Genauigkeit von 94,92 %. Nach sorgfältiger Überlegung habe ich mich für den Einsatz des Ridge-Modells entschieden, da es eine ausgewogene Kombination aus Genauigkeit und Interpretierbarkeit bietet.

Um mit der Bereitstellung fortzufahren, habe ich das trainierte Ridge-Modell in einer Pickle-Datei gespeichert, um dessen Beibehaltung und Kompatibilität auf verschiedenen Plattformen sicherzustellen. Diese Pickle-Datei dient als Container für das trainierte Modell und kapselt dessen Parameter, Struktur und Funktionalität.

import pickle
pickle.dump(scaler,open('scaler.pkl','wb'))
pickle.dump(scaler,open('ridge.pkl','wb'))

Für die Bereitstellung habe ich mich für Streamlit entschieden, ein benutzerfreundliches Framework, das die Erstellung interaktiver Webanwendungen vereinfacht. Streamlit bietet eine intuitive Plattform, um die Vorhersagekraft des Ridge-Modells auf optisch ansprechende und benutzerfreundliche Weise zu demonstrieren.
Hier ist der erste Blick nach der Modellbereitstellung

Hier ist der Hyperlink, um auf den Code für unser Projekt zur Vorhersage des Brandwetterindex zuzugreifen: –

Hier ist der Hyperlink, um auf die Reside-Demo unseres Projekts zur Vorhersage des Brandwetterindex zuzugreifen: –



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here