νμ¬ pandas λ°μ΄ν° νλ μμ λλΆλΆμ sklearn fit/predict/transform λ©μλμ λν μ λ ₯μΌλ‘ μ¬μ©ν μ μμ§λ§ numpy λ°°μ΄μ΄ λμ΅λλ€. μ λ ₯ν κ²κ³Ό λμΌν νμμΌλ‘ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ μ μλ€λ©΄ μ λ§ μ’μ κ²μ λλ€.
λ°μ΄ν° νλ μμ μ«μκ° μλ μ΄μ΄ ν¬ν¨λμ΄ μμΌλ©΄ μ€κ° numpy λ°°μ΄λ‘ μΈν΄ dtype=float
λμ dtype=object
μ΄κΈ° λλ¬Έμ sklearnμ΄ μ€ν¨νκΈ° λλ¬Έμ μ΄κ²μ μλ²½νκ² κ°λ¨νμ§ μμ΅λλ€. μ΄κ²μ μ«μκ° μλ λ°μ΄ν°λ₯Ό μ«μ λ°μ΄ν°(μ: ν΄λμ€/μΉ΄ν
κ³ λ¦¬λ₯Ό λνλ΄λ μ μ)μ 맀ννλ Dataframe->ndarray λ³νκΈ°λ₯Ό μ¬μ©νμ¬ ν΄κ²°ν μ μμ΅λλ€. νμ¬ inverse_transform
κ° μμ§λ§ sklearn-pandasλ μ΄λ―Έ μ΄ μμ
μ μννμ§λ§ μΆκ°νκΈ° μ΄λ ΅μ§ μμμΌ ν©λλ€.
μ΄μ κ°μ λ³νμ sklearnμ μμΌλ©΄ _μ λ§_ μ μ©ν κ² κ°μ΅λλ€. μ¬λ¬ λ°μ΄ν° μ νμ΄ μλ λ°μ΄ν° μΈνΈλ‘ μμ νλ μ¬λμ΄λΌλ©΄ λꡬλ μ μ©ν κ²μ λλ€. sklearnμ μ΄μ κ°μ κ²μ κ°μ Έμ€λ €λ©΄ 무μμ΄ νμν κΉμ?
Scikit-learnμ λ§€μ° μΌλ°μ μΈ μ λ ₯ νμμΌλ‘ μλνλλ‘ μ€κ³λμμ΅λλ€. μλ§λ scikit-learnμ λλ¬μΌ μΈμμ Pandas ν΅ν©μ λ μ€μνκ² λ§λλ λ°©μμΌλ‘ λ§μ΄ λ°λμμ κ²μ λλ€. μ¬μ ν λλΆλΆ νμ¬ λνΌμμ μ 곡ν μ μμ΅λλ€.
κ·Έλ¬λ λ κ΄λ²μν μ§λ¬Έκ³Όλ λ³λλ‘, νμ€ μΆμ κΈ°μ Pandas μΉνμ μΈ μΆλ ₯μ΄ μ΄λ»κ² λ¬λΌμ§κ³ μ¬μ©μ±μ μ°¨μ΄λ₯Ό λ§λλμ§μ λν μλ₯Ό λ€μ΄μΌ νλ€κ³ μκ°ν©λλ€. λ΄κ° μκ°ν μ μλ μ:
κ·Έλ, λ΄ λ¨Έλ¦¬ κΌλκΈ°μμ :
μ΄κ²μ΄ λͺ¨λ λ³νμ μλ κ²½μ° κΈ°λ³Έμ μΌλ‘ sklearnμ΄ μλνλ λ°©μμ μ€μ λ‘ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
λλ κ·Έκ²μ΄ λ³μκΈ°λ‘ λ©μ§κ² ꡬν λ μ μλ€κ³ μκ°νμ§ μμ΅λλ€. κ·Έκ²μ
νλ μ΄μμ metaestimators λλ mixin. λλ κ·Έλ€μ΄ μ²μμ μμ΄μΌνλ€κ³ μκ°ν©λλ€
μΈλΆμμ ꡬνλκ³ μ μ©ν κ²μΌλ‘ μ
μ¦λ¨
2015λ 10μ 22μΌ 17:40μ naught101 [email protected]μ΄ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
κ·Έλ, λ΄ λ¨Έλ¦¬ κΌλκΈ°μμ :
- μΈλ±μ€λ μλ₯Ό λ€μ΄ μκ° μ§μ°μ μμ±νλ λ° μ λ§ μ μ©ν μ μμ΅λλ€.
λ³μ(μ: 1μΌ μ§μ°, μΌλΆ λλ½λ λ μ§κ° μλ μΌμΌ λ°μ΄ν°)- sklearn νκ·μλ λ²μ£Όν λ°μ΄ν°μ ν¨κ» ν¬λͺ νκ² μ¬μ©λ μ μμ΅λλ€.
(νΌν© λ°μ΄ν° νλ μ μ λ¬, LabelBinarizerλ‘ λ²μ£Όν μ΄ λ³ν,
inverse_transform κ·Έκ²μ λ€μ).- sklearn-pandasλ μ΄λ―Έ λ€μμ μνν μ μλ λ©μ§ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.
λ°μ΄ν° νλ μμ μ λ¬νκ³ λ°μ΄ν°μ νμ μ§ν©λ§ μ¬μ©νκ³ μμλ‘
κ°λ³ μ΄μ λ³νν©λλ€.μ΄κ²μ΄ λͺ¨λ λ³νμ μλ€λ©΄ sklearn λ°©λ²μ μ€μ λ‘ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
κΈ°λ³Έμ μΌλ‘ μλν©λλ€.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/scikit-learn/scikit-learn/issues/5523#issuecomment -150123228
.
"pandas in"μ λ μ’κ² λ§λλ κ²μ μΌμ’ μ μ»¬λΌ νΈλμ€ν¬λ¨Έ PR #3886μ μμ΄λμ΄μμ΅λλ€. μλ§λ sklearn-pandasκ° μ΄λ―Έ νκ³ μλ μΌμ λ μμΈν μ΄ν΄λ΄€μ΄μΌ νμ κ²μ λλ€. μμΌλ‘ λμκ° μ μλ μ΅μ μ λ°©λ²μ΄ 무μμΈμ§ μμ ν νμ ν μ μμ΅λλ€.
λ€λ₯Έ μ’μ μ μ λ³νμμ μ΄ μ΄λ¦μ μ μ§νκ±°λ κΈ°λ₯ μ νμ μνν λ μ ννλ κ²μ λλ€. λλ μ°λ¦¬κ° μ§κΈ μ΄κ²μ λ Όμν λ¬Έμ λ₯Ό μ°Ύμ§ λͺ»νμ΅λλ€. @jnothmanμ΄ κΈ°μ΅ν μλ μμ΅λλ€. μ΄ μ΄λ¦μ 보쑴νκΈ° μν΄ μ λ ₯ μ ν¨μ± κ²μ¬μ ν¨κ» ν° μμ μ΄ νμνμ§λ§ μ λ§ μν©λλ€.
κ΄λ ¨ #4196
μ λ ₯ μ ν¨μ± κ²μ¬μ ν¨κ» ν° μμ μ΄ νμνμ§λ§
μ΄ μ΄λ¦ μ μ§ :-/
μ
λ ₯ μ ν¨μ± κ²μ¬λΏλ§ μλλΌ λͺ¨λ λ³νμ 무μμ μ€λͺ
ν΄μΌ ν©λλ€.
μ
λ ₯ μ΄μ μνν©λλ€.
μ¬μ€μ΄μ§λ§, λλ κ·Έκ²μ΄ μ’μ κ²μ΄λΌκ³ μκ°ν©λλ€ ;)
ν κ°μ§ μ§λ¬Έμ μ°λ¦¬κ° μ΄κ²μ νμ΄νλΌμΈμμλ§ μνλμ§ μλλ©΄ λͺ¨λ κ³³μμ μνλμ§μ λλ€. νμ΄νλΌμΈμΌλ‘ μ ννλ©΄ μ λ ₯ μ ν¨μ± κ²μ¬ μμ μ΄ λ μ»€μ§ κ²μ λλ€. νμ§λ§ μΌλ§λ μ μ©ν μ§ λͺ¨λ₯΄κ² μ΅λλ€.
νμ΄νλΌμΈμ νμ ν κ°μ§λ§ ν¬ν¨ν μ μμ΅λλ€. λ§μ£ ? κ·Έλμ μ°λ¦¬λ μ²μμλ νμ΄νλΌμΈμΌλ‘λ§ μ νν¨μΌλ‘μ¨ λͺ¨λ κ²½μ°λ₯Ό _μ’ λ₯_μ²λΌ_ μ²λ¦¬ν©λλ€.
+1. νμ΄νλΌμΈμΌλ‘ μμνλ κ²μ΄ μ’μ΅λλ€. λ€μ λ¨κ³μμ λͺ¨λ νΈλμ€ν¬λ¨Έλ₯Ό λ€λ£Ήλλ€.
λν inverse_transform
λ₯Ό ν΅ν΄ μ΄ μ 보λ₯Ό λλ릴 μ μλ pandas λ° sklearn ν΅ν©μ΄ ν¬ν¨λ implμ΄ μμ΅λλ€(λλ¬μ΄ ν΄νΉ...)
β’ μΈλ±μ€λ μλ₯Ό λ€μ΄ μκ° μ§μ° λ³μλ₯Ό μμ±νλ λ° λ§€μ° μ μ©ν μ μμ΅λλ€.
(μ: 1μΌ μ§μ°, μΌλΆ λλ½λ λ μ§κ° μλ μΌμΌ λ°μ΄ν°)
λλ μ½κ° λ°λ³΄ κ°μ§λ§ μνμ 무μΈκ°μ λν΄ μ΄μΌκΈ°νκ³ μμ§ μμ΅λλ€.
μ¬κΈ°μ λ°©ν₯μ΄ μλλΌ νΉμ§ λ°©ν₯?
β’ sklearn νκ·μλ λ²μ£Όν λ°μ΄ν°μ ν¨κ» ν¬λͺ νκ² μ¬μ©λ μ μμ΅λλ€(ν΅κ³Ό
νΌν© λ°μ΄ν° νλ μ, LabelBinarizerλ‘ λ²μ£Όν μ΄ λ³ν,
inverse_transform λ€μ).β’ sklearn-pandasλ μ΄λ―Έ λ€μμ μ λ¬ν μ μλ λ©μ§ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.
λ°μ΄ν° νλ μ, λ°μ΄ν°μ νμ μ§ν©λ§ μ¬μ©νκ³ μμλ‘ λ³ν
κ°λ³ μ΄.
μ’μ, νμ§λ§ 그건 λͺ¨λ Pandasλ₯Ό μμ©νλ νλμ λ³μκΈ° μμ€μ
λλ€.
λ°μ΄ν° 맀νΈλ¦μ€λ₯Ό μ 곡ν©λλ€. κ·Έλ μ§ μμ΅λκΉ? μλνκΈ° 보λ€λ
scikit-learnμ λͺ¨λ κ°μ²΄μ λν μμ (μν
λ
Έλ ₯), μ°λ¦¬λ λ¨Όμ μ΄ λ³νκΈ°λ₯Ό ꡬνν μ μμ΅λλ€.
@amueller λ μ΄κ²μ μΌλμ λκ³ μμ΅λλ€.)
μ¬κΈ°μμ νΉμ§ λ°©ν₯μ΄ μλλΌ μν λ°©ν₯?
λ€.
μκ² μ΅λλ€. νμ§λ§ κ·Έκ²μ λͺ¨λ Pandasλ₯Ό κ°μ Έμμ λ°μ΄ν° 맀νΈλ¦μ€λ₯Ό λ΄λ³΄λ΄λ νλμ λ³νκΈ° μμ€μ λλ€. κ·Έλ μ£ ?
λ€, μ²μλΆν° κ·Έλ κ² μκ°νμ΅λλ€. X
λ° y
λ₯Ό λ°μ΄ν° νλ μμΌλ‘ μ²λ¦¬νλ λνΌκ° μμΌλ©΄ λν λμ μμ΄ μ’μ΅λλ€. λλ sklearnμ λ΄λΆλ₯Ό λ§μΉ λΆλͺ
ν μ΄μ λ₯Ό λ³΄μ§ λͺ»ν©λλ€.
OK, but that's all at the level of one transformer that takes Pandas in, and gives a data matrix out, isn't it?
λ€, μ²μλΆν° κ·Έλ κ² μκ°νμ΅λλ€. λλ κ·Έκ²λ³΄λ€ λ ν볡ν κ²μ΄λ€.
Xμ yλ₯Ό λ°μ΄ν° νλ μμΌλ‘ μ·¨κΈνλ λνΌ. λλ λͺ λ°±ν μ΄μ λ₯Ό λ³΄μ§ λͺ»νλ€.
sklearnμ λ΄λΆλ‘ λμ¬λ₯Ό μ‘°μ λλ€.
κ·Έλ λ€λ©΄ μ°λ¦¬λ κ°μ νμ΄μ§μ μμ΅λλ€. @amueller μ λν μμ΄λμ΄κ° μλ€κ³ μκ°ν©λλ€.
μ΄κ², κ·Έλ¦¬κ³ μ°λ¦¬λ μ½κ°μ ν λ‘ μ λ³Ό μ μκ³ μλ§λ 곧 μ½λκ° λ κ²μ
λλ€.
λ€λ₯Έ μ’μ μ μ λ³νμμ μ΄ μ΄λ¦μ μ μ§νκ±°λ κΈ°λ₯ μ νμ μνν λ μ ννλ κ²μ λλ€. λλ μ°λ¦¬κ° μ§κΈ μ΄κ²μ λ Όμν λ¬Έμ λ₯Ό μ°Ύμ§ λͺ»νμ΅λλ€.
μ°Έκ³ : μ¬μ©μμκ² μ΄ κΈ°λ₯μ μ 곡νκΈ° μν΄ κ°μ₯ λ°κΉ₯μͺ½ μΆμ κΈ°λ₯Ό μμλΈλ‘λ§ λννκ³ μΆμμ§ κΆκΈνμ΅λλ€. λ΄ μκ°μ λλ΅μ: μλμ, νμ΄νλΌμΈ λ΄μμ λ°μ΄ν° νλ μ μΈμ λ³νκΈ°λ₯Ό νμ©νκΈ° μν΄ μμ λ³νκΈ°λ λννκ³ μΆμ΄ν©λλ€(μ μλλμ?). μ΄κ²μ λ―Ήμ€μΈμΌλ‘ ꡬννμ§ μμΌλ©΄ λΆνμν 맀κ°λ³μ μ λμ¬ λλ 볡μ λ¬Έμ (#5080μμμ κ°μ΄) λ¬Έμ κ° λ°μν κ²μ΄λΌκ³ μκ°ν©λλ€.
:+1:
λ΄κ° μ¬μ©νλ μ루μ μ λ²λ¦¬κ³ μΆμμ΅λλ€.
def check_output(X, ensure_index=None, ensure_columns=None):
"""
Joins X with ensure_index's index or ensure_columns's columns when avaialble
"""
if ensure_index is not None:
if ensure_columns is not None:
if type(ensure_index) is pd.DataFrame and type(ensure_columns) is pd.DataFrame:
X = pd.DataFrame(X, index=ensure_index.index, columns=ensure_columns.columns)
else:
if type(ensure_index) is pd.DataFrame:
X = pd.DataFrame(X, index=ensure_index.index)
return X
κ·Έλ° λ€μ λ³ν μΆλ ₯μμ ββμ΄ ν¨μλ₯Ό νΈμΆνλ sklearnμ μΆμ κΈ° μ£Όμμ λνΌλ₯Ό λ§λλλ€.
from sklearn.preprocessing import StandardScaler as _StandardScaler
class StandardScaler(_StandardScaler):
def transform(self, X):
Xt = super(StandardScaler, self).transform(X)
return check_output(Xt, ensure_index=X, ensure_columns=X)
μ λ ₯ λ°μ΄ν° νλ μ Xμ μΈλ±μ€λ₯Ό μ¬μ©ν΄μΌ νλ λΆλ₯κΈ°λ ν΄λΉ μΈλ±μ€λ₯Ό μ¬μ©ν μ μμ΅λλ€(μ§μλ λλ‘ μκ³μ΄μ μ μ©ν¨).
μ΄ μ κ·Ό λ°©μμ κΈ°μ‘΄ sklearn λμμΈκ³Ό μλ²½νκ² νΈνλλ λμμ κ³μ° μλλ₯Ό μ μ§νλ μ΄μ μ΄ μμ΅λλ€(λ°μ΄ν° νλ μμ λν μν μ°μ° λ° μΈλ±μ±μ numpy λ°°μ΄λ³΄λ€ μ΅λ 10λ°° λ립λλ€. http://penandpants.com/2014/09/05 /performance-of-pandas-series-vs-numpy-arrays/). λΆννλ, κ·Έκ²μ νμ©ν μ μλ κ° μΆμ κΈ°μ μΆκ°νλ κ²μ λ§μ μ§λ£¨ν μμ μ λλ€.
μλ§λ μ΄ λ§λ²μΌλ‘ νμ΄νλΌμΈ λ³νμ λ§λλ κ²μ΄ νμν κ²μ λλ€...
2016λ 1μ 15μΌ 02:30μ Dean Wyatte [email protected]μ΄ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
λ΄κ° μ¬μ©νλ μ루μ μ λ²λ¦¬κ³ μΆμμ΅λλ€.
def check_output(X,sure_index=μμ,sure_columns=μμ):
""
κ°λ₯ν κ²½μ° Xλ₯Όsure_indexμ μΈλ±μ€ λλsure_columnsμ μ΄κ³Ό μ‘°μΈν©λλ€.
""
sure_indexκ° Noneμ΄ μλ κ²½μ°:
sure_columnsκ° Noneμ΄ μλ κ²½μ°:
type(ensure_index)μ΄ pd.DataFrameμ΄κ³ type(ensure_columns)κ° pd.DataFrameμΈ κ²½μ°:
X = pd.DataFrame(X, index=ensure_index.index, columns=ensure_columns.columns)
λ λ€λ₯Έ:
μ ν(ensure_index)μ΄ pd.DataFrameμΈ κ²½μ°:
X = pd.DataFrame(X, index=ensure_index.index)
Xλ₯Ό λ°νκ·Έλ° λ€μ μ΄ ν¨μλ₯Ό νΈμΆνλ sklearnμ μΆμ κΈ° μ£Όμμ λνΌλ₯Ό λ§λλλ€.
λ³νμ μΆλ ₯ μλ₯Ό λ€μ΄,sklearn.preprocessingμμ StandardScalerλ₯Ό _StandardScalerλ‘ κ°μ Έμ΅λλ€.
ν΄λμ€ MinMaxScaler(_MinMaxScaler):
def λ³ν(μ체, X):
Xt = super(MinMaxScaler, self).transform(X)
return check_output(Xt,sure_index=X,sure_columns=X)μ λ ₯ λ°μ΄ν° νλ μ Xμ μΈλ±μ€λ₯Ό μ¬μ©ν΄μΌ νλ λΆλ₯κΈ°λ
μΈλ±μ€λ₯Ό μ¬μ©νμμμ€(μ§μλ μκ³μ΄μ μ μ©ν¨).μ΄ μ κ·Ό λ°©μμ λ€μκ³Ό μμ ν νΈνλλ€λ μ΄μ μ΄ μμ΅λλ€.
κ³μ° μλλ₯Ό μ μ§νλ©΄μ κΈ°μ‘΄ sklearn μ€κ³
(λ°μ΄ν° νλ μμ λν μν μ°μ° λ° μΈλ±μ±μ numpyλ³΄λ€ μ΅λ 10λ°° λ립λλ€.
λ°°μ΄). λΆννλ, κ° μΆμ κΈ°μ μΆκ°νλ κ²μ λ§μ μ§λ£¨ν μμ μ λλ€
νμ©ν μ μλ κ²μ λλ€.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/scikit-learn/scikit-learn/issues/5523#issuecomment -171674105
.
μλλ©΄ νμ΄νλΌμΈ/μΆμ κΈ°λ₯Ό λννλ κ²μ λκΉ?
λλ κ·Έκ²μ΄ λ¨μ§ κ²μ¬νλ κ²λ³΄λ€ ν¨μ¬ λ λ§μ μΌμ ν λ "check_*"μ κ°μ ν¨μλ₯Ό νΈμΆνλ μ΄μ λ₯Ό μ λ§λ‘ μ΄ν΄νμ§ λͺ»ν©λλ€.
2016λ 1μ 14μΌ μ€μ 10:45:44 CST, Joel Nothman [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μλ§λ μ΄ λ§λ²μΌλ‘ νμ΄νλΌμΈ λ³νμ λ§λλ κ²μ΄ νμν κ²μ λλ€...
2016λ 1μ 15μΌ 02:30, Dean Wyatte [email protected]
μΌλ€:λ΄κ° μ¬μ©νλ μ루μ μ λ²λ¦¬κ³ μΆμμ΅λλ€.
def check_output(X,sure_index=μμ,sure_columns=μμ):
""
sure_indexμ μΈλ±μ€ λλsure_columnsμ μ΄κ³Ό Xλ₯Ό μ‘°μΈ
μ¬μ© κ°λ₯ν κ²½μ°
""
sure_indexκ° Noneμ΄ μλ κ²½μ°:
sure_columnsκ° Noneμ΄ μλ κ²½μ°:
type(ensure_index)μ΄ pd.DataFrameμ΄κ³
μ ν(ensure_columns)μ pd.DataFrameμ λλ€.
X = pd.DataFrame(X, index=ensure_index.index,
μ΄=ensure_columns.columns)
λ λ€λ₯Έ:
μ ν(ensure_index)μ΄ pd.DataFrameμΈ κ²½μ°:
X = pd.DataFrame(X, index=ensure_index.index)
Xλ₯Ό λ°νκ·Έλ° λ€μ μ΄κ²μ νΈμΆνλ sklearnμ μΆμ κΈ° μ£Όμμ λνΌλ₯Ό λ§λλλ€.
κΈ°λ₯
λ³νμ μΆλ ₯ μλ₯Ό λ€μ΄,sklearn.preprocessingμμ StandardScalerλ₯Ό _StandardScalerλ‘ κ°μ Έμ΅λλ€.
ν΄λμ€ MinMaxScaler(_MinMaxScaler):
def λ³ν(μ체, X):
Xt = super(MinMaxScaler, self).transform(X)
return check_output(Xt,sure_index=X,sure_columns=X)μ λ ₯ λ°μ΄ν° νλ μ Xμ μΈλ±μ€λ₯Ό μ¬μ©ν΄μΌ νλ λΆλ₯κΈ°λ λ€μμ μνν μ μμ΅λλ€.
λ¨μ§
μΈλ±μ€λ₯Ό μ¬μ©νμμμ€(μ§μλ μκ³μ΄μ μ μ©ν¨).μ΄ μ κ·Ό λ°©μμ λ€μκ³Ό μμ ν νΈνλλ€λ μ΄μ μ΄ μμ΅λλ€.
μλλ₯Ό μ μ§νλ©΄μ κΈ°μ‘΄ sklearn λμμΈ
κ³μ°
(λ°μ΄ν° νλ μμ λν μν μ°μ° λ° μΈλ±μ±μ λ€μλ³΄λ€ μ΅λ 10λ°° λ립λλ€.
numpy
λ°°μ΄). λΆννλ, κ°κ°μ μΆκ°νλ κ²μ λ§μ μ§λ£¨ν μμ μ λλ€
νκ°μ
νμ©ν μ μλ κ²μ λλ€.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.https://github.com/scikit-learn/scikit-learn/issues/5523#issuecomment -171674105
.μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/scikit-learn/scikit-learn/issues/5523#issuecomment -171697542
K-9 Mailμ μ¬μ©νμ¬ Android κΈ°κΈ°μμ 보λμ΅λλ€. μ κ°λ΅ν¨μ μ©μν΄ μ£Όμμμ€.
λͺ¨λ μ΄ μ΄λ¦ μμμ΄ μΆμ κΈ°μ λ°λΌ λ€λ₯΄κΈ° λλ¬Έμ Pipelineμ΄ μμνκΈ°μ μ¬λ°λ₯Έ μμΉμΈμ§ νμ€νμ§ μμ΅λλ€. μλ₯Ό λ€μ΄ μ€μΌμΌλ¬λ μ λ ₯ λ°μ΄ν° νλ μμ μ΄ μ΄λ¦μ μμν΄μΌ νμ§λ§ PCAμ κ°μ λͺ¨λΈμ μμν΄μλ μ λ©λλ€. κΈ°λ₯ μ ν μΆμ κΈ°λ νΉμ μ΄ μ΄λ¦μ μμν΄μΌ νμ§λ§ μ΄λ #2007κ³Ό λ κ΄λ ¨μ΄ μλ λ λ€λ₯Έ λ¬Έμ μ λλ€.
λ³ννλ λμ λͺ¨λ λ°°μ΄μ n_rowsκ° νμ μ μ§λλ κ²½μ°μ λκΉ? κ·Έλ λ€λ©΄ μ λ ₯μ μΈλ±μ€λ₯Ό μμνλ κ²(μ‘΄μ¬νλ κ²½μ°)μ΄ μμ ν κ²μ²λΌ 보μ΄μ§λ§ κΈ°λ³Έ μ΄ μ΄λ¦(μ: [0, 1, 2, 3, ...])μ΄ μλ λ°μ΄ν° νλ μμ κ°μ Έμ€λ κ²μ΄ νμ€νμ§ μμ΅λλ€. μ΅μ’ μ¬μ©μ κ΄μ μμ νμ¬ λμλ³΄λ€ λ«μ§λ§ λͺ μμ λνΌ/λ©ν μΆμ κΈ°κ° μ¬μ©λλ©΄ μ΅μν μ¬μ©μλ 무μμ κΈ°λν΄μΌ νλμ§ μ μ μμ΅λλ€.
λν check_*κ° μ’μ§ μμ μ΄λ¦μ΄λΌλ λ° λμνμ΅λλ€. μ λ μ κΈ°λ₯μμ ν¨μ¬ λ λ§μ μ ν¨μ± κ²μ¬λ₯Ό μννκ³ μμκ³ μ¬κΈ°μ κ²μν λ°μ΄ν° νλ μ λ Όλ¦¬λ₯Ό μ κ±°νμ΅λλ€.
μ΄ μ΄λ¦μ μ μ νκ² λ§€ννλ λͺ¨λ μΆμ κΈ°μ 무μΈκ°λ₯Ό μΆκ°ν΄μΌ νμ§λ§ νμ΄νλΌμΈμ΄ μμν μ₯μκ° λ κ²μ΄λΌκ³ μκ°ν©λλ€.
λ³νκΈ°λ μ μ ν μ΄λ¦μ μ΄ @naught101μ μΆλ ₯ν΄μΌ ν©λλ€.
μ΄ μ΄λ¦μ μ μ§νλ €λ©΄ μ λ ₯ μ ν¨μ± κ²μ¬μ ν¨κ» ν° μμ μ΄ νμνμ§λ§ :-/ @amueller
μ λ ₯ μ ν¨μ± κ²μ¬λΏλ§ μλλΌ λͺ¨λ λ³νμ μ λ ₯ μ΄μ λν΄ μννλ μμ μ μ€λͺ ν΄μΌ ν©λλ€. @GaelVaroquaux
νΈλμ€ν¬λ¨Έμμ νΈλμ€ν¬λ¨Έλ‘ μ΄λ¦μ μ λ¬νλ λ°©λ²κ³Ό μΆμ²λ₯Ό μΆμ νλ λ°©λ²μ λν΄ μκ°ν΄ λ³Έ μ¬λμ΄ μμ΅λκΉ? μ΄κ²μ μ΄λμ μ μ₯ν κΉμ?
λ΄ μΉκ΅¬ @cbrummittλ λΉμ·ν λ¬Έμ κ° μλλ°, κ·Έμ μ€κ³ νλ ¬μ κ° μ΄μ ν¨μν(μ: x^2, x^3, x_1^3x_2^2, sympy μμΌλ‘ νμλ¨)μ΄κ³ κ·Έλ λ³νκΈ°λ₯Ό κ°μ§κ³ μμ΅λλ€. κΈ°λ₯μ ννλ₯Ό μ·¨νκ³ μ΄λ₯Ό κΈ°λ°μΌλ‘ λ λ§μ κ²μ μμ±ν μ μλ PolynomialFeaturesμ μ μ¬νκ² μλν©λλ€. κ·Έλ¬λ κ·Έλ sympyλ₯Ό μ¬μ©νμ¬ μ΄μ ννμμ κ°μ Έ μμ μ ννμμ μμ±νκ³ ννμμ λ¬Έμμ΄ λ μ΄λΈλ‘ μ μ₯νλ©΄ μλ¦¬μ§ μμΌλ©° ν¨μ λ³νμ κ³μΈ΅ν ν λ 볡μ‘ν΄μ§λλ€. κ·Έλ μ΄ λͺ¨λ μμ μ νμ΄νλΌμΈ μΈλΆμμ μνν μ μμ§λ§ GridSearch λ±μ μ΄μ μ μ»μ§ λͺ»ν©λλ€.
μ°λ¦¬ μ§λ¬Έμ λ μΌλ°μ μΈ λ²μ μ λ°μ΄ν° μμ²΄κ° μλ λ³νκΈ°μμ λ³νκΈ°λ‘ μ λ¬λ μΌλΆ μ 보λ₯Ό μ΄λ»κ² κ°μ§κ³ μμ΅λκΉ? νμ΄νλΌμΈ μ μ μνλ₯Ό κ°μ§μ§ μκ±°λ κ° λ³νκΈ°/μΆμ μκ° μ΄μ νλͺ©μ λν΄ μκ² νκ±°λ κ° λ¨κ³μμ μ¬λ¬ νλͺ© λλ 무μΈκ°λ₯Ό λ°ννμ§ μκ³ λ μ’μ λ°©λ²μ μκ°ν΄λΌ μ μμ΅λλ€.
κ·Έλ° λ€μ μ°λ¦¬λ μ΄λ₯Ό μΆμ νκΈ° μν΄ νμ΄νλΌμΈμ μμ νλ μμ΄λμ΄λ μκ°ν΄ λμ΅λλ€. _fit() λ° _transform() λ° κΈ°ν λͺ κ°μ§λ₯Ό λ³κ²½ν΄μΌ ν©λλ€. κ·Έκ²μ΄ μ°λ¦¬μ μ΅μ μ μ νμΈ κ² κ°μ΅λλ€.
μ΄κ²μ λ―ΈμΉ μ리μ²λΌ λ€λ¦¬μ§λ§ μ€μ λ‘ μ°λ¦¬μ λ°μ΄ν° 맀νΈλ¦μ€κ° sympy ννμμ΄ λκΈ°λ₯Ό μνκ³ κ° λ³νμ΄ μλ‘μ΄ ννμμ μμ±νκΈ°λ₯Ό μνλ€λ λλμ΄ λλλ€. μ΄κ²μ λμ°ν©λλ€. check_array()λ μ΄λ₯Ό λ°©μ§νκ³ νμ΄νλΌμΈμ λ€λ₯Έ λ¨κ³λ₯Ό νλκ² λ§λλλ€.
νμ¬ μμ΄λμ΄λ #6425λ₯Ό μ°Έμ‘°νμμμ€.
μνλ κ²μ κ° λ³νκΈ°(νμ΄νλΌμΈ ν¬ν¨)μ λν 맀νμ
λλ€.
λ³νκΈ°), μ
λ ₯ κΈ°λ₯ μ΄λ¦μμ μΆλ ₯ κΈ°λ₯ μ΄λ¦(λλ μΌλΆ
λ΄κ° μκ°νλ λ³νμ ꡬ쑰νλ νν
μ°λ¦¬κ° μ»μ κ²λ³΄λ€ μμ§λμ΄λ§). κ·Έκ²μ΄ #6425κ° μ 곡νλ κ²μ
λλ€.
2016λ
10μ 8μΌ 03:42 Andreas Mueller μλ¦Ό @github.com
μΌλ€:
μμΈν λ΄μ©μ #6425 https://github.com/scikit-learn/scikit-learn/issues/6425 λ₯Ό μ°Έμ‘°
νμ¬ μμ΄λμ΄.β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/scikit-learn/scikit-learn/issues/5523#issuecomment -252301608,
λλ μ€λ λ μμκ±°
https://github.com/notifications/unsubscribe-auth/AAEz65fBsMwqmkDq3DEjMSUC-W-nfn9zks5qxnZxgaJpZM4GThGc
.
μ°λ¦¬λ μ΄κ²μ μ‘°μ¬ν κ²μ λλ€, κ°μ¬ν©λλ€!
λκ΅°κ° μ΄ λ¬Έμ μ λν μΈκ³ νν©μ λν μΌλ°μ μΈ μ λ°μ΄νΈλ₯Ό μ 곡ν μ μμ΅λκΉ?
ν¬λ DataFrame
μ§μμ νμ YMMVμΈκ°μ?
무μμ λν μ§μΉ¨μκ° / ν¬λμ ν¨κ» μ¬μ©νκΈ° μν΄ μμ κ°μ£Όλμ§ μμ΅λλ€ DataFrame
λμ κ·Έλ₯μ΄ ndarray
λμμ΄ λ κ²μ
λλ€. μλ§λ λ€μκ³Ό κ°μ λ΄μ©μΌ κ²μ
λλ€(MADE UP EXAMPLE TABLE).
λͺ¨λ/μΉ΄ν
κ³ λ¦¬|ν¬λ DataFrameμ μμ νκ² μ¬μ©ν μ μμ΅λλ€.
--|--
sklearn.pipeline|μμ
sklearn.feature_selection|μμ
νκ·μ|YMMV
sklearn.feature_extraction|μμ νμ§ μμ, ꡬνν κ³ν μμ
λ±|...
μ§κΈ λΉμ₯μ "κ·Έλ₯ μλνκ³ μμΈκ° λ°μνλμ§ νμΈνμμμ€" μ΄μΈμ μ κ·Ό λ°©μμ νμ€νμ§ μμ΅λλ€.
μ°λ¦¬λ pandas DataFrameμ μλ½νλ κ²μ΄ μ μλνλ κ²μ²λΌ 보μ΄λ μμΌλ‘ μ½λ©ν λͺ κ°μ§ μμ λ₯Ό ν μ€νΈνμ§λ§, μ°λ¦¬κ° κ²λ³΄κΈ°μ μ¬μν΄ λ³΄μ΄λ νμ΄νλΌμΈ κ΅¬μ± μμ κ΅μ²΄κ° νμνλ€κ³ κ²°μ ν λ μ΄κ²μ΄ λΆκ°νΌνκ² μ¬λ°λ₯΄κ² μλνμ§ μμ κ²μ΄λΌκ³ μκ°νμ§ μμ μ μμ΅λλ€... κ·Έ μμ μμ λͺ¨λ κ²μ΄ λΉλ° μ€ν μΆμ μ μΉ΄λ μ§μ²λΌ 무λμ§λλ€.
λ΄ μ΄κΈ° μκ° νλ‘μΈμ€λ μ
λ ₯/μΆλ ₯ DataFrame
κ°μ²΄λ₯Ό numpy ndarray
λ‘ λ³ννκΈ° μν΄ νμ€ scikit-learn κ΅¬μ± μμμ λν λνΌλ₯Ό μλ μμ±νλ pandas DataFrame
λ₯Ό μ¬μ©ν μ μλ λ체 νμ΄νλΌμΈ κ°μ²΄λ₯Ό λ§λλ κ²μ΄μμ΅λλ€. νμμ λ°λΌ ndarray
κ°μ²΄. κ·Έλ κ² νλ©΄ ν¬λ DataFrame
ν리미ν°λΈλ₯Ό μ¬μ©ν μ μλλ‘ λλ§μ μ¬μ©μ μ§μ μ νκΈ°/λ³νκΈ°λ₯Ό μμ±ν μ μμ§λ§ μμ΄ λ§μ΄ κ°λ κ² κ°μ΅λλ€. νΉν μ°λ¦¬κ° κ·Έλ€μ λν "곡μμ μΈ" μ§μμ λ°κΈ° μ§μ μ΄λΌλ©΄ λμ± κ·Έλ μ΅λλ€.
λλ λͺ κ°μ§ λ€λ₯Έ PRμ λ°λ₯΄κ³ μμ§λ§ μ΄λ κ²μ΄ ν¬κΈ°λκ³ νμ¬ μκ°μ λ°μνλμ§ μ΄ν΄νκΈ° μ΄λ ΅μ΅λλ€.
μμ:
μ΄κ²μ "ν¬λ DataFrameμ μμ νκ² μ¬μ©ν μ μμ"μ΄ μλ―Ένλ λ°μ λ°λΌ ν¬κ² λ¬λΌμ§λλ€. λΆλ μμμ μ«μλ§ ν¬ν¨νλ DataFrameμ μλ―Ένλ κ²½μ° λͺ¨λ κ²μ΄ μλν¨μ 보μ₯ν©λλ€. μ무λ°λ λ¬Έμμ΄μ΄ νλλΌλ μμΌλ©΄ μ무 κ²λ μλνμ§ μμ΅λλ€.
μ¬μνμ§ μμ(λλ μ¬μν) μμ μ λν΄ λ°μ΄ν° νλ μμ λ°ννλ scikit-learn estimatorλ κ²°μ½ μΌμ΄λμ§ μμ μλ μλ μΌμ΄λΌκ³ μκ°ν©λλ€(μνμ§λ§).
κΈ°λ₯ #6425λ νμ¬ κ΅¬νλμ΄ μμ΅λλ€(μΌλΆ λ³μκΈ° λ°
λ€λ₯Έ μ¬λμκ² νμ₯ κ°λ₯) λ¨μΌ λμ€ν¨μΉλ₯Ό ββν΅ν΄
κ·Έ κ°μΉμ λν΄μλ https://codecov.io/gh/TeamHG-Memex/eli5 λ₯Ό
2017λ 6μ 21μΌ 13μ 25λΆμ Andreas Mueller [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
9012 https://github.com/scikit-learn/scikit-learn/pull/9012
λ°μνκ³ μμ νλ κ²μ΄λ©° PRμ 첫 λ²μ§Έ λ°λ³΅μ λλ€.
6425 https://github.com/scikit-learn/scikit-learn/issues/6425 λ
ν¬λμ μμ ν κ΄λ ¨μ΄ μλ κ²μ μλμ§λ§ μΌμ΄λ κ°λ₯μ±μ΄ μμ΅λλ€.
3886 https://github.com/scikit-learn/scikit-learn/pull/3886 μ μ€μ λ‘
#9012λ‘ λ체λ¨
https://github.com/scikit-learn/scikit-learn/pull/9012β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/scikit-learn/scikit-learn/issues/5523#issuecomment-309952467 ,
λλ μ€λ λ μμκ±°
https://github.com/notifications/unsubscribe-auth/AAEz61lgGBW1AoukPm_87elBjF2NGOUwks5sGI0-gaJpZM4GThGc
.
μ κ·Έλ¦¬κ³ λ΄κ° "λΉμ μ΄ λΆλ μμμ μ«μλ§μ ν¬ν¨νλ DataFrameμ μλ―Ένλ€λ©΄, μ°λ¦¬λ λͺ¨λ κ²μ΄ μλν κ²μ΄λΌκ³ 보μ₯ν©λλ€."λΌκ³ λ§ν λ. μμΉ κΈ°λ° μ΄ μΈλ±μ±μ μλ―Έν©λλ€. νλ ¨ λ° ν μ€νΈ μΈνΈ μ΄μ μμΉλ³λ‘ λμΌν κ²μΌλ‘ κ°μ ν©λλ€.
μ΄κ²μ "ν¬λ DataFrameμ μμ νκ² μ¬μ©ν μ μμ"μ΄ μλ―Ένλ λ°μ λ°λΌ ν¬κ² λ¬λΌμ§λλ€. λΆλ μμμ μ«μλ§ ν¬ν¨νλ DataFrameμ μλ―Ένλ κ²½μ° λͺ¨λ κ²μ΄ μλν¨μ 보μ₯ν©λλ€. μ무λ°λ λ¬Έμμ΄μ΄ νλλΌλ μμΌλ©΄ μ무 κ²λ μλνμ§ μμ΅λλ€.
λλ κ·Έκ²μ΄ μ°λ¦¬μκ² μΆ©λΆνλ€κ³ μκ°ν©λλ€.
μ°λ¦¬λ μ νκΈ° λλ λͺ¨λΈκ³Ό κ°μ scikit-learn κ΅¬μ± μμμ λλ¬νκΈ° μ μ μΈμ½λ©/μ€μΌμΌλ§μ ν΅ν΄ νΌν© μ ν(λ¬Έμμ΄, λΆλ μμμ λ° μ μ)μ λΆλ μμμ μΌλ‘ λ³ννκΈ° μν΄ μ¬μ©μ μ§μ κ΅¬μ± μμμ νμ΄νλΌμΈ(νμ΄νλΌμΈ μΉνμ μ΄μ§ μμ κΈ°μ‘΄ λꡬ μ£Όμμ μμ λνΌ)μ μ¬μ©νκ³ μμ΅λλ€.
λ΄ λͺ¨λ λ³νκΈ°λ DataFrame
sκ° μ£Όμ΄μ§λ©΄ DataFrame
DataFrame
sλ₯Ό λ°νν©λλ€.
μΈμ μ
λ ₯ 300 μ΄ DataFrame
μ Pipeline
λ°μ 500 μ΄ ndarray
, I ν¨κ³Όμ μΌλ‘, μλ₯Ό λ€μ΄,μ μν΄, κ·Έκ²μμ λ§μ΄ λ°°μΈ μ feature_selection
, λ μ΄μ μ΄ μ΄λ¦μ΄ μκΈ° λλ¬Έμ
λλ€. μλ₯Ό λ€μ΄ mutual_info_classif
30μ΄κ³Ό 75μ΄λ§ μ€μνλ€κ³ λ§νλ©΄ νλ‘λμ
μ μν΄ μλ Pipeline
λ₯Ό λ¨μννλ λ°©λ²μ μ μ μμ΅λλ€.
λ°λΌμ λ΄ λ°μ΄ν°λ₯Ό DataFrame
μ 보κ΄νλ κ²μ΄ λ΄ μ¬μ© μ¬λ‘μμ μ€μν©λλ€.
κ°μ¬ν©λλ€.
@sam- μ μ μΌλ‘ λμν©λλ€. "λ¨κΈ°"μμλ https://github.com/scikit-learn/scikit-learn/pull/13307 λ° https://github.com/scikit-learn/enhancement_proposals/pull/18 μμ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ²μ λλ€.
pandas λ°μ΄ν° νλ μμ μ»μ§λ λͺ»νμ§λ§ νλλ₯Ό μμ±νκΈ° μν΄ μ΄ μ΄λ¦μ μ»κ² λ©λλ€.
κ·Έλ°λ° μ’ λ ꡬ체μ μΈ μλ₯Ό λ€μ΄ μ£Όμκ² μ΅λκΉ? λͺ¨λ λ³νκΈ°κ° DataFramesλ₯Ό λ°ννλ©΄ λͺ¨λ κ²μ΄ μλν΄μΌ νκΈ° λλ¬Έμ λλ€(λλ μμ μ μλ³΄λ€ λ μ½κ² μλνλλ‘ λ§λ€μ΄μΌ ν¨).
https://github.com/pandas-dev/pandas/issues/27211μ ν΅ν μ½κ°μ μ
λ°μ΄νΈ
λ΄ ν¬λ§μ λ°©ν΄ν©λλ€. μ°λ¦¬κ° κ±°κΈ°μμ μ λ‘ μΉ΄νΌ μ볡μ μ λ’°ν μ μλ κ²μ²λΌ 보μ΄λ―λ‘ νλ€λ‘ λννκ³ μΈλννλ κ²μ μλΉν λΉμ©μ μ΄λν κ²μ
λλ€.
pandas-dev/pandas#27211μ ν΅ν μ½κ°μ μ λ°μ΄νΈλ λ΄ ν¬λ§μ μ λμ κ±Έμμ΅λλ€. μ°λ¦¬κ° κ±°κΈ°μμ μ λ‘ μΉ΄νΌ μ볡μ μ λ’°ν μ μλ κ²μ²λΌ 보μ΄λ―λ‘ νλ€λ‘ λννκ³ μΈλννλ κ²μ μλΉν λΉμ©μ μ΄λν κ²μ λλ€.
μ, νμ§λ§ μΌλ¨ κΈ°λ₯κ³Ό μν μν(ν μ΄λ¦κ³Ό "μΈλ±μ€"λ μΌμ’ μ μν μνμ)μ λ€λ£¨λ©΄ μ΄μ ν¬λκ° νμν λλΆλΆμ κ΄λ ¨ μ¬μ© μ¬λ‘κ° λ€λ£¨μ΄μ§ κ² κ°μ£ ?
@adrinjalali "ν¬λκ° νμν λλΆλΆμ κ΄λ ¨ μ¬μ© μ¬λ‘"κ° λ¬΄μμ μλ―Ένλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. λλ μ΄ λ¬Έμ κ° μ£Όλ‘ scikit-learn λ΄μμ κΈ°λ₯μ ꡬννκΈ° μν΄ pandasλ₯Ό μ§μνλ κ²μ΄ μλλΌ scikit-learnμ΄ pandas κΈ°λ° μν¬νλ‘μμ λ μ½κ² ν΅ν©λλλ‘ νλ κ²μΌλ‘ 보μμ΅λλ€.
λ¨μ§ νΈκΈ°μ¬μμ, κ°μ λ Pandas νΈνμ±μ΄ μ°©λ₯ν κ²μΌλ‘ μμλλ κΈ°κ°μ΄ μμ΅λκΉ? μ λ νΉν Pandas in -> Pandas out for StandardScaler
μμ΅λλ€.
Pipeline
κ° λ¨κ³λ₯Ό ν΅ν΄ 보쑴λ ν¬λ λ°μ΄ν° νλ μμ΄ νμν μ¬μ© μ¬λ‘κ° μμ΅λλ€. μλ₯Ό λ€μ΄ 1) λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ κΈ°λ₯μ νν°λ§νλ κΈ°λ₯ μ ν λ¨κ³, 2) λ°μ΄ν° λ³ν λ¨κ³, 3) νΉμ κΈ°λ₯ μ΄ μ΄λ¦ λλ μλ μΈλ±μ€λ₯Ό νν°λ§νκΈ° μν λ λ€λ₯Έ κΈ°λ₯ μ ν λ¨κ³, 4) νμ€ν, 5) λΆλ₯κ° μλ νμ΄νλΌμΈ.
3λ¨κ³) ββ1)μμ κΈ°λ₯ μ ν λ¨κ³κ° μμκΈ° λλ¬Έμ λ°μ΄ν°κ° 3)μ λλ¬νλ©΄ μλ κΈ°λ₯ μΈλ±μ€κ° μλ―Έκ° μκΈ° λλ¬Έμ numpy λ°°μ΄ μ λ ₯μ μ¬μ©νλλΌλ sklearnμμλ νμ¬ λΆκ°λ₯νλ€κ³ μκ°ν©λλ€. pandas λ°μ΄ν° νλ μμ΄ νμ΄νλΌμΈμμ μ μ§λκ³ μλ€λ©΄ 3)μμ μ΄ μ΄λ¦μΌλ‘ νν°λ§ν μ μκΈ° λλ¬Έμ μλν κ²μ λλ€.
numpy λ°°μ΄ μ λ ₯μΌλ‘λ νμ¬μ΄ μμ μ μν ν λ°©λ²μ΄ μλ€κ³ μκ°νλ κ²μ΄ μλͺ»λ κ²μ λκΉ?
μ§μλμ§ μλ κ²μ΄ μ³κ³ μ§μνλ κ²μ΄ μ½μ§ μμ κ²μ λλ€. κ·νμ μ¬μ© μ¬λ‘μ κ΄λ ¨νμ¬ μ°λ¦¬λ νμ΄νλΌμΈμ λ°λΌ κΈ°λ₯ μ΄λ¦μ μ λ¬νκΈ° μν΄ λ Έλ ₯νκ³ μμ΅λλ€(μμ λ§ν¬λ PR λ° μ μμμ λ³Ό μ μλ―μ΄). μΌλ¨ μλ£λλ©΄ κ·νμ μ¬λ‘μ λμμ΄ λ κ²μ λλ€. λμμ΄ λλμ§ μ λͺ¨λ₯΄κ² μ§λ§ https://github.com/scikit-learn-contrib/sklearn-pandas λ₯Ό
μ§μλμ§ μλ κ²μ΄ μ³κ³ μ§μνλ κ²μ΄ μ½μ§ μμ κ²μ λλ€. κ·νμ μ¬μ© μ¬λ‘μ κ΄λ ¨νμ¬ μ°λ¦¬λ νμ΄νλΌμΈμ λ°λΌ κΈ°λ₯ μ΄λ¦μ μ λ¬νκΈ° μν΄ λ Έλ ₯νκ³ μμ΅λλ€(μμ λ§ν¬λ PR λ° μ μμμ λ³Ό μ μλ―μ΄). μΌλ¨ μλ£λλ©΄ κ·νμ μ¬λ‘μ λμμ΄ λ κ²μ λλ€.
νμΈν΄μ£Όμ μ κ°μ¬ν©λλ€. μ, κΈ°λ₯ μ΄λ¦(λλ κΈ°ν κΈ°λ₯ μμ±)μ μ λ¬νμ¬ λ©μλμ λ§λλ‘ νκ³ κ° κΈ°λ₯ μ ν λ¨κ³μμ μ μ νκ² μ¬λΌμ΄μ€ν μ μμΌλ©΄ μ΄ μ¬μ© μ¬λ‘μ μ ν©ν©λλ€.
λμμ΄ λλμ§ μ λͺ¨λ₯΄κ² μ§λ§ https://github.com/scikit-learn-contrib/sklearn-pandas λ₯Ό
μ΄μ μ λλ κ·Έλ€μ λ¬Έμλ₯Ό μ½μκ³ μλ§λ κ·Έκ²μ λ³΄μ§ λͺ»νμ κ²μ
λλ€. κ·Έλ¬λ κ·Έλ€μ κΈ°λ₯μ λλΆλΆ(λλ μ λΆ)μ sklearn.compose.ColumnTransformer
μ ν¨κ» scikit-learn 0.21μμ μ΄μ λ μ΄μ μ¬μ©λμ§ μμ΅λλ€. λν λ³ν ν numpy λ°°μ΄μ²λΌ 보μ΄λ ν¬λλ₯Ό μ§μνμ§ μλ κ² κ°μ΅λλ€.
(κΈ°λ₯ μ νμμ Pandasλ₯Ό μ§μνλ κ²μ΄ μ€λ¨λλμ§ κΆκΈν©λλ€.
λ§μ΄...)
μ½λλ₯Ό κ°λ¨ν νμΈνλ©΄ https://github.com/scikit-learn/scikit-learn/blob/939fa3cccefe708db7a81c5248db32a1d600bf8d/sklearn/utils/validation.pyλ₯Ό μ¬μ©νμ¬ μ¬λ¬ κ³³μμ μμλ‘ λ°μνλ λͺ¨λ μ’ λ₯μ κ²μ¬κ°
λν λ§μ μμ μμ pandas λ°μ΄ν° νλ μμμ νμ©λμ§ μλ numpy λ°©μμΌλ‘ μΈλ±μ±μ μ¬μ©ν©λλ€.
ν¬λλ₯Ό μνμΌλ‘ μ μ§νλ κ²μ μΌμμ μΈ λ°μ΄ν° κ³Όν IMOμ νμ μ¬νμ΄μ§λ§ scikit-learnμ ꡬννκΈ° μ΄λ ΅κ² λ§λλ λ°©μμΌλ‘ μ€κ³λ κ² κ°μ΅λλ€.
ν¬λλ₯Ό μ/λ°μΌλ‘ μ μ§νλ κ²μ μΌμμ μΈ λ°μ΄ν° κ³Όν IMOμ νμ μ¬νμ΄μ§λ§
scikit-learnμ
ꡬν.
μ’μ μ«μλ pandas λ°μ΄ν° νλ μμμ ꡬννκΈ° μ΄λ ΅μ΅λλ€. κ·Έλ€μ λ¨μ§
νΉν λ€λ³μ μ°μ°(μ«μ
μ΄μ κ±ΈμΉ μμ
).
κΈ°κ³ νμ΅μ λλΆλΆ λ€λ³μ μ«μμ λλ€.
μ’μ μ«μλ pandas λ°μ΄ν° νλ μμμ ꡬννκΈ° μ΄λ ΅μ΅λλ€. νΉν λ€λ³μ μ°μ°(μ΄μ λν μμΉ μ°μ°)μ μν κ²μ μλλλ€. κΈ°κ³ νμ΅μ λλΆλΆ λ€λ³μ μ«μμ λλ€.
κ·Έ κ²°μ μ μ¬μ©μμκ² λ§‘κ²¨μΌ ν©λκΉ? μ§λ 2λ λμ scikit-learnμ κ΄λ²μνκ² μ¬μ©ν κ²½νμ λ°λ₯΄λ©΄ λ§μ ML μ¬μ© μ¬λ‘μμ λλ½λμ΄ μμ΄μΌ νλ λ κ°μ§ ν΅μ¬μ μ΄κ³ μ€μν κΈ°λ₯μ μν λ° κΈ°λ₯ λ©νλ°μ΄ν° μ λ¬μ λν μ§μμ λλ€. μμ ν pandas λ°μ΄ν° νλ μ μ§μμ μ΄ μ€ μΌλΆλ₯Ό μ²λ¦¬νλ μμ°μ€λ½κ³ μ°μν λ°©λ²μ λλ€.
μ΄λ¬ν μ’ λ₯μ ν΅μ¬ κΈ°λ₯μ μ¬μ©μ κΈ°λ°μ μ μ§νκ³ μλ‘μ΄ μ¬μ©μλ₯Ό ν보νλ λ° λ§€μ° μ€μν©λλ€. κ·Έλ μ§ μμΌλ©΄ μλ₯Ό λ€μ΄ mlr3κ³Ό κ°μ λΌμ΄λΈλ¬λ¦¬κ° λ°μ΄ν° νλ μκ³Ό λ©νλ°μ΄ν°λ₯Ό μμ ν μ§μνλ€λ κ²μ μκ³ μκΈ° λλ¬Έμ μ¬μ©μλ₯Ό sklearnμμ λ©μ΄μ§κ² νκ³ λμ΄λ€μ΄λ κ²μ λ΄ λλ€.
κ·Έ κ²°μ μ μ¬μ©μμκ² λ§‘κ²¨μΌ ν©λκΉ?
κΈμ, μ¬μ©μλ μκ³ λ¦¬μ¦μ ꡬννμ§ μμ΅λλ€.
κ·Έλ μ§ μμΌλ©΄ mlr3κ³Ό κ°μ λΌμ΄λΈλ¬λ¦¬κ° κ²°κ΅ μ±μνκ³
μ¬μ©μκ° sklearnμ μ¬μ©νμ§ μλλ‘ μ λν©λλ€.
λ°μ΄ν° νλ μκ³Ό λ©νλ°μ΄ν°λ₯Ό μλ²½νκ² μ§μν©λλ€.
mlr3μ Rμ μμΌλ©° λ°μ΄ν° νλ μμ ν¬λ λ°μ΄ν° νλ μκ³Ό μλΉν λ€λ¦
λλ€.
μ΄μ©λ©΄ μ΄λ κ² νλ©΄ ꡬνμ΄ λ μ¬μμ§ μλ μμ΅λλ€.
κΈ°λ₯ μ΄λ¦ λ° μ΄κΈ°μ’
λ°μ΄ν°μ λν λ λμ μ§μμ λμν©λλ€.
μ νμ΄ μ€μν©λλ€. μ°λ¦¬λ μ’μ κΈ°μ μ루μ
μ μ°ΎκΈ° μν΄ λ
Έλ ₯νκ³ μμ΅λλ€
μ±λ₯ μμ€κ³Ό μ§λμΉκ² 볡μ‘ν μ½λλ‘ μ΄μ΄μ§μ§ μμ΅λλ€.
κ·Έ κ²°μ μ μ¬μ©μμκ² λ§‘κ²¨μΌ ν©λκΉ?
κΈμ, μ¬μ©μλ μκ³ λ¦¬μ¦μ ꡬννμ§ μμ΅λλ€.
κ·Έλ μ§ μμΌλ©΄ μλ₯Ό λ€μ΄ mlr3κ³Ό κ°μ λΌμ΄λΈλ¬λ¦¬κ° λ°μ΄ν° νλ μκ³Ό λ©νλ°μ΄ν°λ₯Ό μμ ν μ§μνλ€λ κ²μ μκ³ μκΈ° λλ¬Έμ μ¬μ©μλ₯Ό sklearnμμ λ©μ΄μ§κ² νκ³ λμ΄λ€μ΄λ κ²μ λ΄ λλ€.
mlr3μ Rμ μμΌλ©° λ°μ΄ν° νλ μμ ν¬λ λ°μ΄ν° νλ μκ³Ό μλΉν λ€λ¦ λλ€. μ΄μ©λ©΄ μ΄λ κ² νλ©΄ ꡬνμ΄ λ μ¬μμ§ μλ μμ΅λλ€. κΈ°λ₯ μ΄λ¦κ³Ό μ΄κΈ°μ’ λ°μ΄ν° μ νμ λν λ λμ μ§μμ΄ μ€μνλ€λ λ° λμν©λλ€. μ°λ¦¬λ μ±λ₯ μ νμ μ§λμΉκ² 볡μ‘ν μ½λλ‘ μ΄μ΄μ§μ§ μλ μ°μν κΈ°μ μ루μ μ μ°ΎκΈ° μν΄ λ Έλ ₯νκ³ μμ΅λλ€.
numpy λ°°μ΄μ κ³ μνκ³ μ΅μν μ λ¬ κΈ°λ₯ μ΄λ¦ λλ λ λμ λ€μ€ κΈ°λ₯ λ©νλ°μ΄ν°λ₯Ό μ§μνλ μ κ·Ό λ°©μμ΄ λ§μ μ¬μ© μ¬λ‘μμ μλν κ²μ΄λΌκ³ μκ°ν©λλ€. κ΅μ‘ μν λ©νλ°μ΄ν°λ₯Ό μ λ¬νκΈ° μν΄ μ΄λ―Έ **fit_params
μμ μ§μνκ³ μμΌλ©° λμμΈμ κ°μ νκΈ° μν λ
Έλ ₯μ΄ μλ€λ κ²μ μκ³ μμ΅λλ€. νμ§λ§ https://github.com/scikit-learn/enhancement_proposals/pull/16 μμ ν
μ€νΈ μν λ©νλ°μ΄ν°λ₯Ό transform
λ©μλλ‘ μ λ¬ν΄μΌ νλ μ¬μ© μ¬λ‘κ° μμΌλ©° νμ¬ μ§μλμ§ μλλ€κ³ μΈκΈνμ΅λλ€. .
mlr3μ Rμ μμΌλ©° λ°μ΄ν° νλ μμ ν¬λ λ°μ΄ν° νλ μκ³Ό μλΉν λ€λ¦ λλ€.
μλͺ κ³Όν μ°κ΅¬μ μ μ° κ³Όνμλ μΌλ°μ μΌλ‘ νμ΄μ¬κ³Ό R λͺ¨λμ λ§€μ° μ΅μνλ©° λ λ€ ν¨κ» μ¬μ©ν©λλ€(μ λ ν¬ν¨). λλ scikit-learn μ¬μ©μ κΈ°λ°μ μλΉ λΆλΆμ΄ μλͺ κ³Όν μ°κ΅¬μμ΄λΌκ³ νμ ν©λλ€.
νμ¬ R IMHOμμ μ¬μ© κ°λ₯ν μ±μν ML λΌμ΄λΈλ¬λ¦¬λ μ μ€κ³λ APIλ₯Ό μ 곡νκ³ MLμ μ€μ©μ μΈ λΆλΆ(νμ΄νλΌμΈ, νμ΄νΌνλΌλ―Έν° κ²μ, μ€μ½μ΄λ§ λ±)μ λ§€μ° κ°λ¨νκ² λ§λλ μΈ‘λ©΄μμ scikit-learnμ κ°κΉμ§ μμ λ°λ©΄ Rμμλ μ΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ κ±°μ μ§μ μ½λ©ν΄μΌ ν©λλ€. κ·Έλ¬λ mlr3λ μ²μλΆν° μ¬λ°λ₯Έ λ°©μμΌλ‘ μ€κ³νκΈ° λλ¬Έμ scikit-learnμ λν λ―Έλμ ν° κ²½μμΌλ‘ λ³΄κ³ μμ΅λλ€.
μ’μ μ«μλ pandas λ°μ΄ν° νλ μμμ ꡬννκΈ° μ΄λ ΅μ΅λλ€. κ·Έλ€μ λ¨μ§
νΉν λ€λ³μ μ°μ°(μ«μ
μ΄μ κ±ΈμΉ μμ ).
μ΄μ©λ©΄ λ΄κ° λκ°λ₯Ό λμΉκ³ μμμ§ λͺ¨λ₯΄μ§λ§ DataFrame ( df.values
)μ νκ³ κ³μ°μ μν ν λ€μ μ DataFrameμΌλ‘ λ€μ λ©ννλ κ²μ΄ κ°λ₯νμ§ μμκΉμ?
κ·Έκ²μ κΈ°λ³Έμ μΌλ‘ λ¨κ³ μ¬μ΄μ μλμΌλ‘ μννλ κ²μ΄λ©° Pipeline
μ¬μ©μ λ°©μ§νλ μ μΌν κ²μ
λλ€.
λ΄κ° λκ°λ₯Ό λμΉκ³ μμμ§λ λͺ¨λ₯΄μ§λ§ ν¬μ₯μ ν μλ μμκΉμ?
DataFrame(df.values ββμ¬μ©), κ³μ°μ μνν λ€μ μ
λ°μ΄ν°νλ μ?
μΌλ°μ μΌλ‘ μλμ€: μλνμ§ μμ μ μμΌλ©°(μ΄κΈ°μ’
μ΄)
λ§μ λ©λͺ¨λ¦¬ 볡μ¬λ³ΈμΌλ‘ μ΄μ΄μ§λλ€.
μΌλ°μ μΌλ‘ μλμ€: μλνμ§ μμ μ μμ΅λλ€(μ΄κΈ°μ’ μ΄).
Column Transformers λ±μ΄ κ°λ³μ μΌλ‘ μ²λ¦¬ν μ μλ€κ³ μκ°ν©λλ€.
κ·Έκ²μ λ§μ λ©λͺ¨λ¦¬ 볡μ¬λ³ΈμΌλ‘ μ΄μ΄μ§ κ²μ λλ€.
μ΄λ €μ΄ μ€κ³ λ° κ΅¬ν μ νμ΄ μλ€λ κ²μ μ΄ν΄νλ©° μ΄λ νλΉν μ£Όμ₯μ λλ€.
κ·Έλ¬λ sklearnμ΄ μ΄ λ©ν λ°μ΄ν°λ₯Ό μ§μνλ λ°©μμ κ°μ νλ κ²μ΄ μ’μ§ μλ€κ³ μ£Όμ₯νλ μ΄μ λ₯Ό μ΄ν΄νμ§ λͺ»ν©λλ€.
μλ₯Ό λ€μ΄ κΈ°λ₯μ΄ μλ dfλ₯Ό μμ§νκ³ , μμΈ‘μ λλΆμ μ΄μ μΆκ°νκ³ , λ λ§μ λ°μ΄ν° μ‘°μμ μννκ³ , λ€λ₯Έ μμΈ‘μ μννλ λ± νμ΄νλΌμΈμμ μ΄ λͺ¨λ κ²μ νμ©νλ κ²μ (μλ₯Ό λ€μ΄) νμ΄νΌ 맀κ°λ³μ μ΅μ νλ₯Ό νμ©νκΈ° λλ¬Έμ μ μ©ν κ²μ λλ€. ν¨μ¬ λ ν΅ν©λκ³ μ°μν λ°©μμΌλ‘.
pandasλ₯Ό μ¬μ©νκ±°λ μ¬μ©νμ§ μκ³ μννλ κ²μ λ°μ΄ν°λ₯Ό μ‘°μνλ κ°μ₯ μΌλ°μ μ΄κ³ μ½κ³ μΈκΈ° μλ λ°©λ²μ΄κ³ λ΄κ° ν κ²λ³΄λ€ λ€μ μμ±νλ μ΄μ μ΄ μκΈ° λλ¬Έμ μ μμΌ λΏμ λλ€.
μ±λ₯μ μ΅μ νν λ μ΄ μν¬νλ‘λ₯Ό μ¬μ©νμ§ μμ κ²μΈμ§ κ²°μ νλ κ²μ μ¬μ©μμ λͺ«μ λλ€.
μ¬μ©μμ νλ¨μ λ§‘κΈ°κ³ λͺ
ννκ² μ€λͺ
ν΄μΌ ν¨
μ¬μ©μμκ² μ ν. λλΆλΆμ μ¬μ©μλ λ€μκ³Ό κ°μ λ¬Έμλ₯Ό μ½μ§ μμ΅λλ€.
κ·Έλ¬ν μ νμ μ€λͺ
νμμμ€. λ§μ μ¬λλ€μ΄ ν¨κ³Όκ° μλ€κ³ μκ°νλ κ²μ μλν λ€μ
κ·Έκ²μ΄ μμ μ μ νμ΄λΌλ κ²μ κΉ¨λ«μ§ λͺ»νκ³ λ리λ€κ³ μκ°νλ©΄ ν¬κΈ°νμμμ€.
κ·Έλ κ² λ§λ λ€λΌνλ μ.
κ·Έλμ μ°λ¦¬λ μ¬κΈ°μμ μ½κ°μ μ£Όμλ₯Ό κΈ°μΈμ¬μΌ ν©λλ€. νμ§λ§ μ°λ¦¬λ κ³μ ν΄κ²°ν΄μΌ ν©λλ€
μ΄κ²μ λμ μ°μ μμλ‘.
κ°μ₯ μ’μ μ루μ μ μν λ° κΈ°λ₯ μμ±μ λν΄ ν¬λ λ°μ΄ν° νλ μμ μνμΌλ‘ μ§μνκ³ μ μ νκ² μ λ¬νκ³ νλ ¨ λ° ν μ€νΈ μ ν©/λ³νμΌλ‘ μ¬λΌμ΄μ±νλ κ²μ΄λΌκ³ μκ°ν©λλ€. κ·Έλ¬λ©΄ λ°μ΄ν° νλ ¬ Xμ μλλ₯Ό numpy λ°°μ΄λ‘ μ μ§νλ©΄μ λλΆλΆμ μ¬μ© μ¬λ‘λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
μ΄ μΈμμμ λλ½λ ν κ°μ§ μ€μν μ μ pandasκ° np.array(pd.DataFrame(numpy_data))
λ κ°μ _보μ¦λ_ λ©λͺ¨λ¦¬ 볡μ¬λ³Έμ΄ μλ λ°©μμΌλ‘ λ°μ΄ν°μ μ΄ νμ ννμΌλ‘ μ΄λνκ³ μλ€λ κ²μ
λλ€. κ·Έλ κΈ° λλ¬Έμ λ°μ΄ν° νλ μμ μ μ§νκ³ μλκ° νμν λλ§λ€ values
μ¬μ©νλ κ²λ§νΌ μ½μ§ μμ΅λλ€.
μ΄ μΈμμμ λλ½λ ν κ°μ§ μ€μν μ μ pandasκ°
np.array(pd.DataFrame(numpy_data))
λ κ°μ _보μ¦λ_ λ©λͺ¨λ¦¬ 볡μ¬λ³Έμ΄ μλ λ°©μμΌλ‘ λ°μ΄ν°μ μ΄ νμ ννμΌλ‘ μ΄λνκ³ μλ€λ κ²μ λλ€. κ·Έλ κΈ° λλ¬Έμ λ°μ΄ν° νλ μμ μ μ§νκ³ μλκ° νμν λλ§λ€values
μ¬μ©νλ κ²λ§νΌ μ½μ§ μμ΅λλ€.
μ΄μ κ²μλ¬Όμμ λ΄κ° λͺ ννκΈ°λ₯Ό λ°λλλ€. λλ scikit-learnμ΄ νμ¬ X λ°μ΄ν°μ λν pandas λ°μ΄ν° νλ μμ μ§μν νμκ° μλ€κ³ μκ°νλ©°, λΉ λ₯Έ numpy λ°°μ΄λ‘ μ μ§ν©λλ€. κ·Έλ¬λ λ§μ μ¬μ© μ¬λ‘λ₯Ό ν΄κ²°ν μ μλ κ²μ λ©νλ°μ΄ν°(μ: μν μμ± λ° κΈ°λ₯ μμ±)μ© ν¬λ λ°μ΄ν° νλ μ νλ μμν¬λ₯Ό ν΅ν μμ ν μ§μμ λλ€. μ΄ λ λ°μ΄ν° ꡬ쑰λ Xμ λΉν΄ μκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ 볡μ¬λ³Έμ κ²½μ°μλ μ±λ₯ λΆλ΄μ΄ λμ΄μλ μ λλ©° μ€μ λ‘ μ΄λ€μ λν λΆλΆ μ§ν©λ§ μνλ©λλ€.
μ, μ΄λ¬ν λ³κ²½ μ¬νμ λ§μ μ¬μ© μ¬λ‘μμ λμμ΄ λλ©° νμ¬ μμ μ€μ λλ€. κ·Έλ¬λ μ΄ λ¬Έμ λ κ·Έ μ΄μμ λλ€. https://github.com/scikit-learn/scikit-learn/issues/5523#issuecomment -508807755
@hermidalc X
κ° numpy λ°°μ΄μ΄ λλλ‘ νκ³ λ€λ₯Έ λ°μ΄ν° νλ μ κ°μ²΄μ λ©ν λ°μ΄ν°λ₯Ό ν λΉνλλ‘ μ μνκ³ μμ΅λκΉ?
@hermidalc
X
κ° numpy λ°°μ΄μ΄ λλλ‘ νκ³ λ€λ₯Έ λ°μ΄ν° νλ μ κ°μ²΄μ λ©ν λ°μ΄ν°λ₯Ό ν λΉνλλ‘ μ μνκ³ μμ΅λκΉ?
μ, μν μμ± λ° κΈ°λ₯ μμ±μ ν¬λ λ°μ΄ν° νλ μμΌλ‘ μλ²½νκ² μ§μν©λλ€. λ€λ₯Έ PR λ° λ¬Έμ μ μν μμ± λ° κΈ°λ₯ μ΄λ¦μ λν λ Όμκ° μ΄λ―Έ μ§ν μ€μ λλ€(μ: #9566 λ° #14315).
μ΄ λ¬Έμ μ λν΄ μ½μμΌλ©° μ¬κΈ°μ λ κ°μ§ μ£Όμ μ°¨λ¨κΈ°κ° μλ κ² κ°μ΅λλ€.
λμ xarrayμ λν μ§μμ μΆκ°νλ κ²μ κ³ λ €νμ΅λκΉ? νλ€μ νκ³λ μμ΅λλ€.
X = np.arange(10).reshape(5, 2)
assert np.asarray(xr.DataArray(X)) is X
assert np.asarray(xr.Dataset({"data": (("samples", "features"), X)}).data).base is X.base
sklearn-xarray
λΌλ ν¨ν€μ§κ° μμ΅λλ€. https://phausamann.github.io/sklearn-xarray/content/wrappers.html xarrayλ₯Ό μ
λ ₯ λ° μΆλ ₯μΌλ‘ μ²λ¦¬νκΈ° μν΄ scikit μΆμ κΈ°λ₯Ό λννμ§λ§ μ μ§ κ΄λ¦¬λμ§ μμ κ² κ°μ΅λλ€. μ°λ Ή. κ·Έλ¬λ λνΌκ° μ¬κΈ°μ κ°λ λ°©λ²μΈμ§ κΆκΈν©λλ€.
xarrayλ μ κ·Ήμ μΌλ‘ κ³ λ €λκ³ μμ΅λλ€. https://github.com/scikit-learn/scikit-learn/pull/16772 μμ νλ‘ν νμ μ λ§λ€κ³ μμ μ€μ λλ€. PRμμ APIκ° μ΄λ»κ² 보μ΄λμ§μ λν μ¬μ© λ ΈνΈλΆμ΄ μμ΅λλ€.
(0.23 릴리μ€κ° λλλ©΄ λ€μ λμμ€κ² μ΅λλ€)
μ λ μ΄ κΈ°λ₯μ κ΄μ¬μ΄ λ§μ΅λλ€.
κ·Έκ²μ 무νν λ¬Έμ λ₯Ό ν΄κ²°ν κ²μ
λλ€. νμ¬ μ΄κ²μ΄ λ΄κ° μ¬μ©νλ μ루μ
μ
λλ€.
sklearn.preprocessing
λͺ¨λ μ£Όμμ λνΌλ₯Ό μμ±νμΌλ©° sklearn_wrapper
λ°λΌμ sklearn.preprocessing
μμ κ°μ Έμ€λ λμ sklearn_wrapper
μμ κ°μ Έμ΅λλ€.
μλ₯Ό λ€μ΄:
# this
from sklearn.preprocessing import StandardScaler
# becomes
from sklearn_wrapper import StandardScaler
μ΄ λͺ¨λμ ꡬν μλμ μμ΅λλ€. κ·Έκ²μ μλνκ³ μ¬λ¬λΆμ μκ°μ μλ €μ£ΌμΈμ
from functools import wraps
from itertools import chain
import pandas as pd
from sklearn import preprocessing, compose, feature_selection, decomposition
from sklearn.compose._column_transformer import _get_transformer_list
modules = (preprocessing, feature_selection, decomposition)
def base_wrapper(Parent):
class Wrapper(Parent):
def transform(self, X, **kwargs):
result = super().transform(X, **kwargs)
check = self.check_out(X, result)
return check if check is not None else result
def fit_transform(self, X, y=None, **kwargs):
result = super().fit_transform(X, y, **kwargs)
check = self.check_out(X, result)
return check if check is not None else result
def check_out(self, X, result):
if isinstance(X, pd.DataFrame):
result = pd.DataFrame(result, index=X.index, columns=X.columns)
result = result.astype(X.dtypes.to_dict())
return result
def __repr__(self):
name = Parent.__name__
tmp = super().__repr__().split('(')[1]
return f'{name}({tmp}'
Wrapper.__name__ = Parent.__name__
Wrapper.__qualname__ = Parent.__name__
return Wrapper
def base_pca_wrapper(Parent):
Parent = base_wrapper(Parent)
class Wrapper(Parent):
@wraps(Parent)
def __init__(self, *args, **kwargs):
self._prefix_ = kwargs.pop('prefix', 'PCA')
super().__init__(*args, **kwargs)
def check_out(self, X, result):
if isinstance(X, pd.DataFrame):
columns = [f'{self._prefix_}_{i}' for i in range(1, (self.n_components or X.shape[1]) + 1)]
result = pd.DataFrame(result, index=X.index, columns=columns)
return result
return Wrapper
class ColumnTransformer(base_wrapper(compose.ColumnTransformer)):
def check_out(self, X, result):
if isinstance(X, pd.DataFrame):
return pd.DataFrame(result, index=X.index, columns=self._columns[0]) if self._remainder[1] == 'drop' \
else pd.DataFrame(result, index=X.index, columns=X.columns). \
astype(self.dtypes.iloc[self._remainder[-1]].to_dict())
class SelectKBest(base_wrapper(feature_selection.SelectKBest)):
def check_out(self, X, result):
if isinstance(X, pd.DataFrame):
return pd.DataFrame(result, index=X.index, columns=X.columns[self.get_support()]). \
astype(X.dtypes[self.get_support()].to_dict())
def make_column_transformer(*transformers, **kwargs):
n_jobs = kwargs.pop('n_jobs', None)
remainder = kwargs.pop('remainder', 'drop')
sparse_threshold = kwargs.pop('sparse_threshold', 0.3)
verbose = kwargs.pop('verbose', False)
if kwargs:
raise TypeError('Unknown keyword arguments: "{}"'
.format(list(kwargs.keys())[0]))
transformer_list = _get_transformer_list(transformers)
return ColumnTransformer(transformer_list, n_jobs=n_jobs,
remainder=remainder,
sparse_threshold=sparse_threshold,
verbose=verbose)
def __getattr__(name):
if name not in __all__:
return
for module in modules:
Parent = getattr(module, name, None)
if Parent is not None:
break
if Parent is None:
return
if module is decomposition:
Wrapper = base_pca_wrapper(Parent)
else:
Wrapper = base_wrapper(Parent)
return Wrapper
__all__ = [*[c for c in preprocessing.__all__ if c[0].istitle()],
*[c for c in decomposition.__all__ if c[0].istitle()],
'SelectKBest']
def __dir__():
tmp = dir()
tmp.extend(__all__)
return tmp
https://github.com/koaning/scikit-lego/issues/304 sklearn.pipeline.FeatureUnion ν«ν½μ€λ‘ λ λ€λ₯Έ μ루μ μ 곡
κ°μ₯ μ μ©ν λκΈ
λ΄ λͺ¨λ λ³νκΈ°λ
DataFrame
sκ° μ£Όμ΄μ§λ©΄DataFrame
DataFrame
sλ₯Ό λ°νν©λλ€.μΈμ μ λ ₯ 300 μ΄
DataFrame
μPipeline
λ°μ 500 μ΄ndarray
, I ν¨κ³Όμ μΌλ‘, μλ₯Ό λ€μ΄,μ μν΄, κ·Έκ²μμ λ§μ΄ λ°°μΈ μfeature_selection
, λ μ΄μ μ΄ μ΄λ¦μ΄ μκΈ° λλ¬Έμ λλ€. μλ₯Ό λ€μ΄mutual_info_classif
30μ΄κ³Ό 75μ΄λ§ μ€μνλ€κ³ λ§νλ©΄ νλ‘λμ μ μν΄ μλPipeline
λ₯Ό λ¨μννλ λ°©λ²μ μ μ μμ΅λλ€.λ°λΌμ λ΄ λ°μ΄ν°λ₯Ό
DataFrame
μ 보κ΄νλ κ²μ΄ λ΄ μ¬μ© μ¬λ‘μμ μ€μν©λλ€.κ°μ¬ν©λλ€.