Ich lese manchmal eine CSV-Datei ohne Spaltennamen und gebe ihr einen Spaltennamen, aber ich vergesse oft, wie es geht, also notiere es mir als Memorandum.
Es tut uns leid. Der Inhalt ist wirklich keine große Sache.
Die verwendeten Daten waren die im UCI-Repository für maschinelles Lernen veröffentlichten Wohnungsdaten. housing data
Lesen Sie zuerst die Daten. Die Daten werden durch Leerzeichen anstelle von Kommas getrennt. Geben Sie daher die Leerzeichen in sep an. Da Housing.Data keinen Spaltennamen hat, werden die Daten in der ersten Zeile beim normalen Lesen als Spaltenname erkannt. Geben Sie daher header = None an, um dies zu vermeiden.
import pandas as pd
df = pd.read_csv("housing.data", header=None, sep="\s+")
Das Ergebnis des Lesens der Daten ist
Es wird sein. Nummern von 0 bis 13 werden automatisch als Spaltennamen zugewiesen. Ersetzen Sie diesen automatisch erstellten Spaltennamen durch den ursprünglichen Spaltennamen. Erstellen Sie zunächst ein Wörterbuch (label_dict), das den Spaltennamen vor der Konvertierung mit dem Spaltennamen nach der Konvertierung verknüpft. Wenn Sie in der Umbenennungsmethode des Datenrahmens label_dict angeben, werden die Spaltennamen gemäß der im Wörterbuch angezeigten Entsprechung ersetzt.
labels = ["CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT", "MEDV"]
labels_dict = {num: label for num, label in enumerate(labels)}
df = df.rename(columns = labels_dict)
#Speichern Sie den Datenrahmen mit dem hinzugefügten Spaltennamen als CSV-Datei.
df.to_csv("housing_data.csv", index=False)
Wenn Sie nach der Ausführung das Innere von df überprüfen, können Sie feststellen, dass der Spaltenname geändert wurde.
Da es sich um eine große Sache handelt, verwenden wir diese Daten, um den Immobilienpreis grob vorherzusagen.
Wenn Sie den folgenden Code ausführen, sehen Sie, dass es sich bei diesen Daten ausschließlich um numerische Daten handelt und keine Werte fehlen. Sie können auch Statistiken anzeigen. Bitte versuchen Sie es, wenn Sie möchten.
from IPython.display import display
#Datentypanzeige
display(df.dtypes)
#Anzeige der Anzahl fehlender Werte
display(df.isnull().sum())
#Anzeige von Statistiken
display(df.describe())
Normalerweise werden Daten vorverarbeitet, während die Statistiken der Daten überprüft werden, und dann werden die Daten in den Algorithmus für maschinelles Lernen eingegeben, diesmal jedoch weggelassen. Was ich gesagt habe ist, dass es okay ist.
Ich lasse verschiedene Dinge weg. Immerhin ist es okay. Zumindest standardisieren wir die Daten und werten sie mit Testdaten aus, passen jedoch keine Hyperparameter an. Die Bewertung basierte einfach auf dem mittleren quadratischen Fehler (RMSE). Der Code ist unten.
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
%matplotlib inline
#Pipeline-Einstellungen
pipe = Pipeline([
("scl", StandardScaler()),
("pca", PCA(n_components=10)),
("lr", LinearRegression(normalize=False))
])
#Datenaufteilung
xtrain, xtest, ytrain, ytest = train_test_split(df[df.columns[df.columns != "MEDV"]], df["MEDV"], test_size=0.3, random_state=1)
#Modelllernen
pipe.fit(X=xtrain, y=ytrain)
#Preisprognose
ypred = pipe.predict(xtest)
#Modellbewertung
display(mean_squared_error(ytest, ypred))
#Ergebnisse anzeigen
result = pd.DataFrame(columns=["index", "true", "pred"])
result["index"] = range(len(ytest))
result["true"] = ytest.tolist()
result["pred"] = ypred
plt.figure(figsize=(15,5))
plt.scatter(result["index"], result["true"], marker="x", label="true")
plt.scatter(result["index"], result["pred"], marker="v", label="predict")
plt.xlabel("ID")
plt.ylabel("Medianpreis")
plt.grid()
plt.legend()
plt.show()
Als ich dies tat, betrug der durchschnittliche quadratische Fehler 21,19. Ich weiß nicht, ob dies gut oder schlecht ist, ohne die Daten richtig zu betrachten, aber vorerst konnte ich den Unterschied zwischen der Preisprognose und dem wahren Wert bewerten.
Zusätzlich werden der vorhergesagte Wert und der wahre Wert wie folgt in Gramm umgewandelt. Auf einen Blick sehen Sie, dass je höher der Preis, desto größer die Abweichung und desto niedriger der vorhergesagte Wert.
Recommended Posts