μ¬λ¬λΆμ λ°μ΄ν°μ μ λ©μ§κ² μΆλ ₯νκΈ°μλ, 머리λ₯Ό κ°μ μ λλ‘ λ§μ λ³μλ₯Ό κ°μ§κ³ μμ΅λλ€. μ΄λ»κ² νλ©΄ μ΄ μμ²λ μμ λ°μ΄ν°λ₯Ό μ΄ν΄ν μ μλ μμ€μΌλ‘ μ€μΌ μ μμκΉμ?
μ°λ¦¬λ μ§κ΄μ μ¬μ©νμ¬ λͺ κ°μ§ λ³μλ₯Ό μ ννλ κ²μΌλ‘ μμνκ² μ΅λλ€. μ΄ ν κ³Όμ μμλ λ³μμ μ°μ μμλ₯Ό μλμΌλ‘ μ§μ νλ ν΅κ³ κΈ°λ²μ μμλ³΄κ² μ΅λλ€.
λ³μμ μ΄μ μ ννκΈ° μν΄μλ, μ°μ λ°μ΄ν°μ μ λͺ¨λ μ΄ λͺ©λ‘μ νμΈν΄μΌ ν©λλ€. μ΄ μμ μ DataFrameμ columns μμ±(μλ μ½λμ 맨 μλ« μ€)μΌλ‘ μ€νλ©λλ€.
import pandas as pd
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path)
melbourne_data.columns
# Melbourne dataμ λͺλͺ κ²°μΈ‘κ°μ΄ μ‘΄μ¬ν¨ (λͺλͺ μ£Όνμ λͺλͺ κ°μ΄ κΈ°λ‘λμ§ μμ)
# μ΄ ν νν 리μΌμμ κ²°μΈ‘κ°μ μ²λ¦¬νλ λ°©λ²μ λ°°μΈ μμ
# μ¬λ¬λΆμ΄ μ¬μ©νλ Iowa dataμ μ΄μλ κ²°μΈ‘κ°μ΄ μ‘΄μ¬νμ§ μμ
# λ°λΌμ κ°μ₯ κ°λ¨ν μ΅μ
μ μ¬μ©ν κ²μ΄λ©°, μ΄λ μ°λ¦¬ λ°μ΄ν°μμ κ°μ λλ‘ν κ²μ.
# μ§κΈ λΉμ₯μ κ±±μ νμ§ λ§κ³ , λ€μ μ½λλ₯Ό μ€ννλλ‘ νμ:
# dropnaλ κ²°μΈ‘κ°μ μ κ±°νλ€. (naλ₯Ό "μ¬μ© λΆκ°λ₯"μΌλ‘ μκ°)
melbourne_data = melbourne_data.dropna(axis=0)
λ°μ΄ν°μ νμ μ§ν©μ μ ννλ λ°©λ²μ μ¬λ¬ κ°μ§κ° μμ΅λλ€. νλ€μ κ΄λ ¨λ κ°μμμλ μ΄μ λν΄ μ‘°κΈ λ μμΈν λ€λ£¨μ§λ§, μ§κΈμ λ κ°μ§ μ κ·Όλ²μ μ΄μ μ λ§μΆ κ²μ λλ€.
μ¬λ¬λΆμ μ νκΈ°λ²μ μ¬μ©νμ¬ λ³μλ₯Ό μΆμΆν μ μμ΅λλ€. μ΄ νλμ μ΄μ DataFrameκ³Ό μ μ¬ν Series μλ£κ΅¬μ‘°λ‘ μ μ₯λ©λλ€.
μ νκΈ°λ²μ μ¬μ©νμ¬ μμΈ‘ν μ΄μ μ νν©λλ€. μ΄λ κ² μ νν μ΄μ prediction targetμ΄λΌκ³ ν©λλ€. μΌλ°μ μΌλ‘, prediction targetμ y
λ‘ μ§μ ν©λλ€. Melbourne dataμμ μ£Όν κ°κ²©λ₯Ό μ μ₯νκΈ° μν΄ νμν μ½λλ λ€μκ³Ό κ°μ΅λλ€:
y = melbourne_data.Price
λͺ¨λΈμ μ λ ₯λκ³ λμ€μ μμΈ‘νλ λ° μ¬μ©λλ μ΄μ "features"λΌκ³ ν©λλ€. μ°λ¦¬μ κ²½μ°, μ£Όν κ°κ²©μ κ²°μ νλ λ° μ¬μ©λλ μ΄μ΄ λ κ²μ λλ€. κ°λ, prediction targetμ μ μΈν λͺ¨λ μ΄μ΄ featureλ‘ μ¬μ©λλ κ²½μ°λ μμ΅λλ€. λλ‘λ μ μ featureλ₯Ό μ¬μ©νλ κ²μ΄ λ λμ μ μμ΅λλ€.
μ§κΈμ λͺκ°μ§ featuresλ§ μ¬μ©νλ λͺ¨λΈμ λ§λ€λλ‘ νκ² μ΅λλ€. λμ€μ μ¬λ¬λΆμ λ€μν featuresλ‘ μ μλ λͺ¨λΈμ λΉκ΅νλ λ°©λ²μ μ μ μμ κ²μ λλ€.
κ΄νΈ μμ μ΄ μ΄λ¦μ 리μ€νΈλ₯Ό μμ±νμ¬ μ¬λ¬ featuresλ₯Ό μ νν μ μμ΅λλ€. ν΄λΉ νλͺ©μ λ°μ΄νμ κ°μΈμ§ λ¬Έμμ΄μ΄μ΄μΌ ν©λλ€.
λ€μμ μμμ λλ€:
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
μΌλ°μ μΌλ‘, μ΄ λ°μ΄ν°λ₯Ό X
λΌκ³ ν©λλ€.
X = melbourne_data[melbourne_features]
μ΄μ describe
μ head
λ©μλλ₯Ό ν΅ν΄ μ£Όν κ°κ²©μ μμΈ‘νλ λ° μ¬μ©ν λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² κ²ν ν΄λ³΄λλ‘ νκ² μ΅λλ€.
X.describe()
X.head()
μ΄λ¬ν λͺ λ Ήμ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μκ°μ μΌλ‘ νμΈνλ κ²μ λ°μ΄ν° κ³Όνμμ μμ μμ μ€μν λΆλΆμ λλ€. λ°μ΄ν°μ μμ μΆκ°μ μΈ ν μ€νΈλ₯Ό μνν κ°μΉκ° μλ μλ―Έμλ κ°μ μμ£Ό λ°κ²¬ν μ μμ΅λλ€.
μ¬λ¬λΆμ scikit-learn λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λͺ¨λΈμ λ§λ€ μμ μ
λλ€. μν μ½λμμ λ³Ό μ μλ κ² μ²λΌ μ΄ λΌμ΄λΈλ¬λ¦¬λ sklearn
μΌλ‘ μμ±λ©λλ€. scikit-learn
λΌμ΄λΈλ¬λ¦¬λ μΌλ°μ μΌλ‘ DataFrameμ μ μ₯λ λ°μ΄ν°μ μ νμ λͺ¨λΈλ§νλ λ° κ°μ₯ λ리 μ¬μ©λλ λΌμ΄λΈλ¬λ¦¬μ
λλ€.
λͺ¨λΈμ λ§λ€κ³ μ¬μ©νλ λ¨κ³λ λ€μκ³Ό κ°μ΅λλ€:
λ€μμ scikit-learn λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νμ¬ μμ¬κ²°μ νΈλ¦¬ λͺ¨λΈμ μ μνκ³ target variableκ³Ό featureλ‘ νΌν νλ μμμ λλ€.
from sklearn.tree import DecisionTreeRegressor
# λͺ¨λΈμ μ μ. random_stateμ μ«μλ₯Ό μ§μ νμ¬ μ€νν λλ§λ€ λμΌν κ²°κ³Όλ₯Ό 보μ₯
melbourne_model = DecisionTreeRegressor(random_state=1)
# λͺ¨λΈ Fitting
melbourne_model.fit(X, y)
λ§μ κΈ°κ³ νμ΅ λͺ¨λΈμ λͺ¨λΈ νλ ¨μμ μ½κ°μ 무μμμ±μ νμ©ν©λλ€. random_state
μ μ«μλ₯Ό μ§μ νλ©΄ κ° runμμ λμΌν κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€. μ΄λ μ’μ κ΄νμΌλ‘ κ°μ£Όλ©λλ€. μμμ μ«μλ₯Ό μ¬μ©νλ©΄ ν΄λΉ κ°μ λ°λΌ λͺ¨λΈμ νμ§μ΄ ν¬κ² λ¬λΌμ§μ§ μμ΅λλ€.
μ΄μ μμΈ‘νλλ° μ¬μ©ν μ μλ νΌν λͺ¨λΈμ λ§λ€μμ΅λλ€.
μ°μ΅μμ, μ¬λ¬λΆμ μ΄λ―Έ κ°κ²©μ΄ μ± μ λ μ£Όν보λ€λ μμ₯μ λμ¬ μλ‘μ΄ μ£Όνμ λν μμΈ‘μ νκ³ μΆμ κ²μ λλ€. κ·Έλ¬λ, μ¬κΈ°μμλ μμΈ‘ ν¨μκ° μ΄λ»κ² μλνλμ§ λ³΄κΈ° μν΄μ νμ΅λ°μ΄ν°μ μ²μ λͺ νμ λν μμΈ‘μ μνν κ²μ λλ€.
print("λ€μ 5κ° μ£Όνμ λν μμΈ‘μ μ§νν κ²μ
λλ€:")
print(X.head())
print("μμΈ‘ κ°μ:")
print(melbourne_model.predict(X.head()))
μ¬κΈ°μμ μ¬λ¬λΆ μ€μ€λ‘ μμ λ₯Ό μννμμμ€.