Scikit-learn: νŒ¬λ” 인, νŒ¬λ” 아웃?

에 λ§Œλ“  2015λ…„ 10μ›” 22일  Β·  59μ½”λ©˜νŠΈ  Β·  좜처: scikit-learn/scikit-learn

ν˜„μž¬ pandas 데이터 ν”„λ ˆμž„μ„ λŒ€λΆ€λΆ„μ˜ sklearn fit/predict/transform λ©”μ„œλ“œμ— λŒ€ν•œ μž…λ ₯으둜 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ numpy 배열이 λ‚˜μ˜΅λ‹ˆλ‹€. μž…λ ₯ν•œ 것과 λ™μΌν•œ ν˜•μ‹μœΌλ‘œ 데이터λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€λ©΄ 정말 쒋을 κ²ƒμž…λ‹ˆλ‹€.

데이터 ν”„λ ˆμž„μ— μˆ«μžκ°€ μ•„λ‹Œ 열이 ν¬ν•¨λ˜μ–΄ 있으면 쀑간 numpy λ°°μ—΄λ‘œ 인해 dtype=float λŒ€μ‹  dtype=object 이기 λ•Œλ¬Έμ— sklearn이 μ‹€νŒ¨ν•˜κΈ° λ•Œλ¬Έμ— 이것은 μ™„λ²½ν•˜κ²Œ κ°„λ‹¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 μˆ«μžκ°€ μ•„λ‹Œ 데이터λ₯Ό 숫자 데이터(예: 클래슀/μΉ΄ν…Œκ³ λ¦¬λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜)에 λ§€ν•‘ν•˜λŠ” Dataframe->ndarray λ³€ν™˜κΈ°λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ inverse_transform κ°€ μ—†μ§€λ§Œ sklearn-pandasλŠ” 이미 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€λ§Œ μΆ”κ°€ν•˜κΈ° 어렡지 μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

이와 같은 λ³€ν™˜μ€ sklearn에 있으면 _정말_ μœ μš©ν•  것 κ°™μŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ 데이터 μœ ν˜•μ΄ μžˆλŠ” 데이터 μ„ΈνŠΈλ‘œ μž‘μ—…ν•˜λŠ” μ‚¬λžŒμ΄λΌλ©΄ λˆ„κ΅¬λ‚˜ μœ μš©ν•  κ²ƒμž…λ‹ˆλ‹€. sklearn에 이와 같은 것을 κ°€μ Έμ˜€λ €λ©΄ 무엇이 ν•„μš”ν• κΉŒμš”?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚΄ λͺ¨λ“  λ³€ν™˜κΈ°λŠ” DataFrame sκ°€ 주어지면 DataFrame DataFrame sλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
μ–Έμ œ μž…λ ₯ 300 μ—΄ DataFrame 에 Pipeline 받을 500 μ—΄ ndarray , I 효과적으둜, 예λ₯Ό λ“€μ–΄,에 μ˜ν•΄, κ·Έκ²ƒμ—μ„œ 많이 배울 수 feature_selection , 더 이상 μ—΄ 이름이 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ mutual_info_classif 30μ—΄κ³Ό 75μ—΄λ§Œ μ€‘μš”ν•˜λ‹€κ³  λ§ν•˜λ©΄ ν”„λ‘œλ•μ…˜μ„ μœ„ν•΄ μ›λž˜ Pipeline λ₯Ό λ‹¨μˆœν™”ν•˜λŠ” 방법을 μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ λ‚΄ 데이터λ₯Ό DataFrame 에 λ³΄κ΄€ν•˜λŠ” 것이 λ‚΄ μ‚¬μš© μ‚¬λ‘€μ—μ„œ μ€‘μš”ν•©λ‹ˆλ‹€.
κ°μ‚¬ν•©λ‹ˆλ‹€.

λͺ¨λ“  59 λŒ“κΈ€

Scikit-learn은 맀우 일반적인 μž…λ ₯ ν˜•μ‹μœΌλ‘œ μž‘λ™ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ scikit-learn을 λ‘˜λŸ¬μ‹Ό 세상은 Pandas 톡합을 더 μ€‘μš”ν•˜κ²Œ λ§Œλ“œλŠ” λ°©μ‹μœΌλ‘œ 많이 λ°”λ€Œμ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€. μ—¬μ „νžˆ λŒ€λΆ€λΆ„ 타사 λž˜νΌμ—μ„œ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ 더 κ΄‘λ²”μœ„ν•œ μ§ˆλ¬Έκ³ΌλŠ” λ³„λ„λ‘œ, ν‘œμ€€ μΆ”μ •κΈ°μ˜ Pandas μΉœν™”μ μΈ 좜λ ₯이 μ–΄λ–»κ²Œ 달라지고 μ‚¬μš©μ„±μ— 차이λ₯Ό λ§Œλ“œλŠ”μ§€μ— λŒ€ν•œ 예λ₯Ό λ“€μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ‚΄κ°€ 생각할 수 μžˆλŠ” 예:

  • λͺ¨λ“  λ©”μ„œλ“œλŠ” μž…λ ₯μ—μ„œ 인덱슀λ₯Ό 볡사할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ³€ν™˜κΈ°λŠ” μ μ ˆν•œ μ΄λ¦„μ˜ 열을 좜λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 닀쀑 클래슀 predict_probaλŠ” 클래슀 μ΄λ¦„μœΌλ‘œ 열에 λ ˆμ΄λΈ”μ„ 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

그래, λ‚΄ 머리 κΌ­λŒ€κΈ°μ—μ„œ :

  • μΈλ±μŠ€λŠ” 예λ₯Ό λ“€μ–΄ μ‹œμ°¨ 지연 λ³€μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 데 정말 μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€(예: 1일 지연, 일뢀 λˆ„λ½λœ λ‚ μ§œκ°€ μžˆλŠ” 일일 데이터)
  • sklearn νšŒκ·€μžλŠ” λ²”μ£Όν˜• 데이터와 투λͺ…ν•˜κ²Œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€(ν˜Όν•© 데이터 ν”„λ ˆμž„ 전달, LabelBinarizer둜 λ²”μ£Όν˜• μ—΄ λ³€ν™˜, μ—­λ³€ν™˜).
  • sklearn-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이 μžˆμŠ΅λ‹ˆλ‹€(λ”λŸ¬μš΄ ν•΄ν‚Ή...)

http://pandas-ml.readthedocs.org/en/latest/sklearn.html

β€’ μΈλ±μŠ€λŠ” 예λ₯Ό λ“€μ–΄ μ‹œκ°„ 지연 λ³€μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 데 맀우 μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
(예: 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 에 λŒ€ν•œ 아이디어가 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
이것, 그리고 μš°λ¦¬λŠ” μ•½κ°„μ˜ 토둠을 λ³Ό 수 있고 μ•„λ§ˆλ„ 곧 μ½”λ“œκ°€ 될 κ²ƒμž…λ‹ˆλ‹€.

λ‹€λ₯Έ 쒋은 점은 λ³€ν™˜μ—μ„œ μ—΄ 이름을 μœ μ§€ν•˜κ±°λ‚˜ κΈ°λŠ₯ 선택을 μˆ˜ν–‰ν•  λ•Œ μ„ νƒν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ‚˜λŠ” μš°λ¦¬κ°€ μ§€κΈˆ 이것을 λ…Όμ˜ν•œ 문제λ₯Ό 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

5172

μ°Έκ³ : μ‚¬μš©μžμ—κ²Œ 이 κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ κ°€μž₯ λ°”κΉ₯μͺ½ μΆ”μ •κΈ°λ₯Ό μ•™μƒλΈ”λ‘œλ§Œ λž˜ν•‘ν•˜κ³  싢은지 κΆκΈˆν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄ 생각에 λŒ€λ‹΅μ€: μ•„λ‹ˆμš”, νŒŒμ΄ν”„λΌμΈ λ‚΄μ—μ„œ 데이터 ν”„λ ˆμž„ 인식 λ³€ν™˜κΈ°λ₯Ό ν—ˆμš©ν•˜κΈ° μœ„ν•΄ μ›μž λ³€ν™˜κΈ°λ„ λž˜ν•‘ν•˜κ³  μ‹Άμ–΄ν•©λ‹ˆλ‹€(μ™œ μ•ˆλ˜λ‚˜μš”?). 이것을 믹슀인으둜 κ΅¬ν˜„ν•˜μ§€ μ•ŠμœΌλ©΄ λΆˆν•„μš”ν•œ λ§€κ°œλ³€μˆ˜ 접두사 λ˜λŠ” 볡제 문제(#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을 λ”°λ₯΄κ³  μžˆμ§€λ§Œ μ–΄λŠ 것이 포기되고 ν˜„μž¬ 생각을 λ°˜μ˜ν•˜λŠ”μ§€ μ΄ν•΄ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ:

6425(이 μŠ€λ ˆλ“œμ˜ μœ„ 2016λ…„ 10μ›” μ°Έμ‘°)

9012(sklearn-pandas와 λΆ„λͺ…νžˆ κ²ΉμΉ˜μ§€λ§Œ μ‹€ν—˜μš©μœΌλ‘œ 주석이 λ‹¬λ ΈμŠ΅λ‹ˆκΉŒ?)

3886(#9012 ?둜 λŒ€μ²΄λ¨)

이것은 "νŒ¬λ” DataFrame을 μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 있음"이 μ˜λ―Έν•˜λŠ” 바에 따라 크게 λ‹¬λΌμ§‘λ‹ˆλ‹€. 뢀동 μ†Œμˆ˜μ  숫자만 ν¬ν•¨ν•˜λŠ” DataFrame을 μ˜λ―Έν•˜λŠ” 경우 λͺ¨λ“  것이 μž‘λ™ν•¨μ„ 보μž₯ν•©λ‹ˆλ‹€. μ•„λ¬΄λ°λ‚˜ λ¬Έμžμ—΄μ΄ ν•˜λ‚˜λΌλ„ 있으면 아무 것도 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ‚¬μ†Œν•˜μ§€ μ•Šμ€(λ˜λŠ” μ‚¬μ†Œν•œ) μž‘μ—…μ— λŒ€ν•΄ 데이터 ν”„λ ˆμž„μ„ λ°˜ν™˜ν•˜λŠ” scikit-learn estimatorλŠ” κ²°μ½” μΌμ–΄λ‚˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλŠ” 일이라고 μƒκ°ν•©λ‹ˆλ‹€(μ›ν•˜μ§€λ§Œ).

9012κ°€ λ°œμƒν•˜κ³  μ•ˆμ •λ  κ²ƒμž…λ‹ˆλ‹€. PR은 첫 번째 λ°˜λ³΅μž…λ‹ˆλ‹€(λ˜λŠ” λ³‘ν•©λ˜μ§€ μ•Šμ€ λ°˜λ³΅μ„ κ³„μ‚°ν•˜λŠ” 경우 10번째 반볡 ;).

6425κ°€ λ°œμƒν•  κ°€λŠ₯성이 λ†’μ§€λ§Œ νŒ¬λ”μ™€ μ™„μ „νžˆ 관련이 μžˆλŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.

3886은 μ‹€μ œλ‘œ #9012둜 λŒ€μ²΄λ©λ‹ˆλ‹€.

κΈ°λŠ₯ #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).

이 λ¬Έμ œμ— λŒ€ν•΄ μ½μ—ˆμœΌλ©° 여기에 두 가지 μ£Όμš” 차단기가 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

  1. https://github.com/pandas-dev/pandas/issues/27211
  2. κ·Έ νŒ¬λ”λŠ” ND 배열을 μ²˜λ¦¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λŒ€μ‹  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 ν•«ν”½μŠ€λ‘œ 또 λ‹€λ₯Έ μ†”λ£¨μ…˜ 제곡

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰