νμ΄μ¬μμ ν¬μ νλ ¬λ‘ xgboostλ₯Ό νλ ¨νλ λμ ValueError: feature_names mismatchκ° λ°μν©λλ€.
xgboost λ²μ μ gitμ μ΅μ λ²μ μ
λλ€. μ΄μ λ²μ μμλ μ΄ μ€λ₯κ° λ°μνμ§ μμ΅λλ€. μμΈ‘ μκ° λμ μ€λ₯κ° λ°νλ©λλ€.
from scipy import sparse
import xgboost as xgb
from random import *
randBinList = lambda n: [randint(0,1) for b in range(1,n+1)]
train = sparse.rand(100,500)
test = sparse.rand(10, 500)
y = randBinList(100)
clf = xgb.XGBClassifier()
clf.fit(train,y)
preds = clf.predict_proba(test)
ValueError Traceback (most recent call last)
<ipython-input-15-e03f10289bf1> in <module>()
----> 1 preds = clf.predict_proba(test)
/usr/local/lib/python2.7/dist-packages/xgboost-0.4-py2.7.egg/xgboost/sklearn.pyc in predict_proba(self, data, output_margin, ntree_limit)
471 class_probs = self.booster().predict(test_dmatrix,
472 output_margin=output_margin,
--> 473 ntree_limit=ntree_limit)
474 if self.objective == "multi:softprob":
475 return class_probs
/usr/local/lib/python2.7/dist-packages/xgboost-0.4-py2.7.egg/xgboost/core.pyc in predict(self, data, output_margin, ntree_limit, pred_leaf)
937 option_mask |= 0x02
938
--> 939 self._validate_features(data)
940
941 length = ctypes.c_ulong()
/usr/local/lib/python2.7/dist-packages/xgboost-0.4-py2.7.egg/xgboost/core.pyc in _validate_features(self, data)
1177
1178 raise ValueError(msg.format(self.feature_names,
-> 1179 data.feature_names))
1180
1181 def get_split_value_histogram(self, feature, fmap='', bins=None, as_pandas=True):
ValueError: feature_names mismatch: ['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f20', 'f21', 'f22', 'f23', 'f24', 'f25', 'f26', 'f27', 'f28', 'f29', 'f30', 'f31', 'f32', 'f33', 'f34', 'f35', 'f36', 'f37', 'f38', 'f39', 'f40', 'f41', 'f42', 'f43', 'f44', 'f45', 'f46', 'f47', 'f48', 'f49', 'f50', 'f51', 'f52', 'f53', 'f54', 'f55', 'f56', 'f57', 'f58', 'f59', 'f60', 'f61', 'f62', 'f63', 'f64', 'f65', 'f66', 'f67', 'f68', 'f69', 'f70', 'f71', 'f72', 'f73', 'f74', 'f75', 'f76', 'f77', 'f78', 'f79', 'f80', 'f81', 'f82', 'f83', 'f84', 'f85', 'f86', 'f87', 'f88', 'f89', 'f90', 'f91', 'f92', 'f93', 'f94', 'f95', 'f96', 'f97', 'f98', 'f99', 'f100', 'f101', 'f102', 'f103', 'f104', 'f105', 'f106', 'f107', 'f108', 'f109', 'f110', 'f111', 'f112', 'f113', 'f114', 'f115', 'f116', 'f117', 'f118', 'f119', 'f120', 'f121', 'f122', 'f123', 'f124', 'f125', 'f126', 'f127', 'f128', 'f129', 'f130', 'f131', 'f132', 'f133', 'f134', 'f135', 'f136', 'f137', 'f138', 'f139', 'f140', 'f141', 'f142', 'f143', 'f144', 'f145', 'f146', 'f147', 'f148', 'f149', 'f150', 'f151', 'f152', 'f153', 'f154', 'f155', 'f156', 'f157', 'f158', 'f159', 'f160', 'f161', 'f162', 'f163', 'f164', 'f165', 'f166', 'f167', 'f168', 'f169', 'f170', 'f171', 'f172', 'f173', 'f174', 'f175', 'f176', 'f177', 'f178', 'f179', 'f180', 'f181', 'f182', 'f183', 'f184', 'f185', 'f186', 'f187', 'f188', 'f189', 'f190', 'f191', 'f192', 'f193', 'f194', 'f195', 'f196', 'f197', 'f198', 'f199', 'f200', 'f201', 'f202', 'f203', 'f204', 'f205', 'f206', 'f207', 'f208', 'f209', 'f210', 'f211', 'f212', 'f213', 'f214', 'f215', 'f216', 'f217', 'f218', 'f219', 'f220', 'f221', 'f222', 'f223', 'f224', 'f225', 'f226', 'f227', 'f228', 'f229', 'f230', 'f231', 'f232', 'f233', 'f234', 'f235', 'f236', 'f237', 'f238', 'f239', 'f240', 'f241', 'f242', 'f243', 'f244', 'f245', 'f246', 'f247', 'f248', 'f249', 'f250', 'f251', 'f252', 'f253', 'f254', 'f255', 'f256', 'f257', 'f258', 'f259', 'f260', 'f261', 'f262', 'f263', 'f264', 'f265', 'f266', 'f267', 'f268', 'f269', 'f270', 'f271', 'f272', 'f273', 'f274', 'f275', 'f276', 'f277', 'f278', 'f279', 'f280', 'f281', 'f282', 'f283', 'f284', 'f285', 'f286', 'f287', 'f288', 'f289', 'f290', 'f291', 'f292', 'f293', 'f294', 'f295', 'f296', 'f297', 'f298', 'f299', 'f300', 'f301', 'f302', 'f303', 'f304', 'f305', 'f306', 'f307', 'f308', 'f309', 'f310', 'f311', 'f312', 'f313', 'f314', 'f315', 'f316', 'f317', 'f318', 'f319', 'f320', 'f321', 'f322', 'f323', 'f324', 'f325', 'f326', 'f327', 'f328', 'f329', 'f330', 'f331', 'f332', 'f333', 'f334', 'f335', 'f336', 'f337', 'f338', 'f339', 'f340', 'f341', 'f342', 'f343', 'f344', 'f345', 'f346', 'f347', 'f348', 'f349', 'f350', 'f351', 'f352', 'f353', 'f354', 'f355', 'f356', 'f357', 'f358', 'f359', 'f360', 'f361', 'f362', 'f363', 'f364', 'f365', 'f366', 'f367', 'f368', 'f369', 'f370', 'f371', 'f372', 'f373', 'f374', 'f375', 'f376', 'f377', 'f378', 'f379', 'f380', 'f381', 'f382', 'f383', 'f384', 'f385', 'f386', 'f387', 'f388', 'f389', 'f390', 'f391', 'f392', 'f393', 'f394', 'f395', 'f396', 'f397', 'f398', 'f399', 'f400', 'f401', 'f402', 'f403', 'f404', 'f405', 'f406', 'f407', 'f408', 'f409', 'f410', 'f411', 'f412', 'f413', 'f414', 'f415', 'f416', 'f417', 'f418', 'f419', 'f420', 'f421', 'f422', 'f423', 'f424', 'f425', 'f426', 'f427', 'f428', 'f429', 'f430', 'f431', 'f432', 'f433', 'f434', 'f435', 'f436', 'f437', 'f438', 'f439', 'f440', 'f441', 'f442', 'f443', 'f444', 'f445', 'f446', 'f447', 'f448', 'f449', 'f450', 'f451', 'f452', 'f453', 'f454', 'f455', 'f456', 'f457', 'f458', 'f459', 'f460', 'f461', 'f462', 'f463', 'f464', 'f465', 'f466', 'f467', 'f468', 'f469', 'f470', 'f471', 'f472', 'f473', 'f474', 'f475', 'f476', 'f477', 'f478', 'f479', 'f480', 'f481', 'f482', 'f483', 'f484', 'f485', 'f486', 'f487', 'f488', 'f489', 'f490', 'f491', 'f492', 'f493', 'f494', 'f495', 'f496', 'f497', 'f498'] ['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f20', 'f21', 'f22', 'f23', 'f24', 'f25', 'f26', 'f27', 'f28', 'f29', 'f30', 'f31', 'f32', 'f33', 'f34', 'f35', 'f36', 'f37', 'f38', 'f39', 'f40', 'f41', 'f42', 'f43', 'f44', 'f45', 'f46', 'f47', 'f48', 'f49', 'f50', 'f51', 'f52', 'f53', 'f54', 'f55', 'f56', 'f57', 'f58', 'f59', 'f60', 'f61', 'f62', 'f63', 'f64', 'f65', 'f66', 'f67', 'f68', 'f69', 'f70', 'f71', 'f72', 'f73', 'f74', 'f75', 'f76', 'f77', 'f78', 'f79', 'f80', 'f81', 'f82', 'f83', 'f84', 'f85', 'f86', 'f87', 'f88', 'f89', 'f90', 'f91', 'f92', 'f93', 'f94', 'f95', 'f96', 'f97', 'f98', 'f99', 'f100', 'f101', 'f102', 'f103', 'f104', 'f105', 'f106', 'f107', 'f108', 'f109', 'f110', 'f111', 'f112', 'f113', 'f114', 'f115', 'f116', 'f117', 'f118', 'f119', 'f120', 'f121', 'f122', 'f123', 'f124', 'f125', 'f126', 'f127', 'f128', 'f129', 'f130', 'f131', 'f132', 'f133', 'f134', 'f135', 'f136', 'f137', 'f138', 'f139', 'f140', 'f141', 'f142', 'f143', 'f144', 'f145', 'f146', 'f147', 'f148', 'f149', 'f150', 'f151', 'f152', 'f153', 'f154', 'f155', 'f156', 'f157', 'f158', 'f159', 'f160', 'f161', 'f162', 'f163', 'f164', 'f165', 'f166', 'f167', 'f168', 'f169', 'f170', 'f171', 'f172', 'f173', 'f174', 'f175', 'f176', 'f177', 'f178', 'f179', 'f180', 'f181', 'f182', 'f183', 'f184', 'f185', 'f186', 'f187', 'f188', 'f189', 'f190', 'f191', 'f192', 'f193', 'f194', 'f195', 'f196', 'f197', 'f198', 'f199', 'f200', 'f201', 'f202', 'f203', 'f204', 'f205', 'f206', 'f207', 'f208', 'f209', 'f210', 'f211', 'f212', 'f213', 'f214', 'f215', 'f216', 'f217', 'f218', 'f219', 'f220', 'f221', 'f222', 'f223', 'f224', 'f225', 'f226', 'f227', 'f228', 'f229', 'f230', 'f231', 'f232', 'f233', 'f234', 'f235', 'f236', 'f237', 'f238', 'f239', 'f240', 'f241', 'f242', 'f243', 'f244', 'f245', 'f246', 'f247', 'f248', 'f249', 'f250', 'f251', 'f252', 'f253', 'f254', 'f255', 'f256', 'f257', 'f258', 'f259', 'f260', 'f261', 'f262', 'f263', 'f264', 'f265', 'f266', 'f267', 'f268', 'f269', 'f270', 'f271', 'f272', 'f273', 'f274', 'f275', 'f276', 'f277', 'f278', 'f279', 'f280', 'f281', 'f282', 'f283', 'f284', 'f285', 'f286', 'f287', 'f288', 'f289', 'f290', 'f291', 'f292', 'f293', 'f294', 'f295', 'f296', 'f297', 'f298', 'f299', 'f300', 'f301', 'f302', 'f303', 'f304', 'f305', 'f306', 'f307', 'f308', 'f309', 'f310', 'f311', 'f312', 'f313', 'f314', 'f315', 'f316', 'f317', 'f318', 'f319', 'f320', 'f321', 'f322', 'f323', 'f324', 'f325', 'f326', 'f327', 'f328', 'f329', 'f330', 'f331', 'f332', 'f333', 'f334', 'f335', 'f336', 'f337', 'f338', 'f339', 'f340', 'f341', 'f342', 'f343', 'f344', 'f345', 'f346', 'f347', 'f348', 'f349', 'f350', 'f351', 'f352', 'f353', 'f354', 'f355', 'f356', 'f357', 'f358', 'f359', 'f360', 'f361', 'f362', 'f363', 'f364', 'f365', 'f366', 'f367', 'f368', 'f369', 'f370', 'f371', 'f372', 'f373', 'f374', 'f375', 'f376', 'f377', 'f378', 'f379', 'f380', 'f381', 'f382', 'f383', 'f384', 'f385', 'f386', 'f387', 'f388', 'f389', 'f390', 'f391', 'f392', 'f393', 'f394', 'f395', 'f396', 'f397', 'f398', 'f399', 'f400', 'f401', 'f402', 'f403', 'f404', 'f405', 'f406', 'f407', 'f408', 'f409', 'f410', 'f411', 'f412', 'f413', 'f414', 'f415', 'f416', 'f417', 'f418', 'f419', 'f420', 'f421', 'f422', 'f423', 'f424', 'f425', 'f426', 'f427', 'f428', 'f429', 'f430', 'f431', 'f432', 'f433', 'f434', 'f435', 'f436', 'f437', 'f438', 'f439', 'f440', 'f441', 'f442', 'f443', 'f444', 'f445', 'f446', 'f447', 'f448', 'f449', 'f450', 'f451', 'f452', 'f453', 'f454', 'f455', 'f456', 'f457', 'f458', 'f459', 'f460', 'f461', 'f462', 'f463', 'f464', 'f465', 'f466', 'f467', 'f468', 'f469', 'f470', 'f471', 'f472', 'f473', 'f474', 'f475', 'f476', 'f477', 'f478', 'f479', 'f480', 'f481', 'f482', 'f483', 'f484', 'f485', 'f486', 'f487', 'f488', 'f489', 'f490', 'f491', 'f492', 'f493', 'f494', 'f495', 'f496', 'f497', 'f498', 'f499']
training data did not have the following fields: f499
μ΄κ²μ ν¬μ νλ ¬μ΄ CSCμΈ κ²½μ°μλ§ μλνλ κ² κ°μ΅λλ€. μ΄μ λ²μ κ³Ό κ°μ CSR λλ COO 맀νΈλ¦μ€μμλ μλνμ§ μμ΅λλ€.
맨 μ€λ₯Έμͺ½ μ΄μ΄ λͺ¨λ 0 λλ 1μΌ λ 무μμ λ¬Έμ κ° λ°μνμ§ μμ΅λκΉ? #1091 λ° #1221κ³Ό κ°μ μ μμ΅λλ€.
@sinhrks : λμκ² κ·Έκ²μ "무μμ"κ° μλλλ€. λλ λ§€μ° ν¬μν λ°μ΄ν°μ λν΄ XGBoostλ₯Ό μμ£Ό νλ ¨μν΅λλ€.
κ·Έλ° λ€μ νλ‘λμ νκ²½μμ νλ ¨λ λͺ¨λΈμ μ€ννκ² λλ©΄ λΉμ°ν λ€μ΄μ€λ λ°μ΄ν°μ μλ‘μ΄ λΆλΆμ λν΄ μμΈ‘μ νκ³ μΆμ΅λλ€. λ¬Όλ‘ ν΄λΉ λ°μ΄ν°λ ν¬μ κ°λ₯μ±μ΄ λκ³ λ§μ§λ§ μ΄μ΄ λλ μ΄μ λν κ°μ΄ μμ΅λλ€. κ·Έλμ XGBoostλ μ΄μ μμ£Ό μ€λ¨λκ³ , ν¬μ λ°μ΄ν°λ₯Ό λ μ μ§μνκΈ° λλ¬Έμ λ€λ₯Έ(λ μ νν¨) λͺ¨λΈλ‘ μ ννλ κ²μ λ°κ²¬νμ΅λλ€.
μ΄ μ€λ₯κ° λ°μνλ μ΄μ μ ν΄κ²° λ°©λ²μ μ νν μλ μ¬λμ΄ μμ΅λκΉ? κΈ°μ‘΄ μ€ν¬λ¦½νΈκ° μ€ν¨νκΈ° λλ¬Έμ μ΄κ²μ μ μκ² κ³ ν΅μ€λ¬μ΄ μ μ λλ€.
sklearn νμ΄νλΌμΈμ μΌλΆλ‘ xgboostλ₯Ό μλνκ³ λμΌν λ¬Έμ κ° λ°μνμ΅λλ€. ν΄κ²°λ λκΉμ§ ν΄κ²° λ°©λ²μ΄ μμ΅λκΉ?
μ, predictλ₯Ό νΈμΆν λ ν¬μ λ°°μ΄μ toarray() ν¨μλ₯Ό μ¬μ©ν©λλ€. λ©λͺ¨λ¦¬μμλ λ§€μ° λΉν¨μ¨μ μ΄μ§λ§ μμ μ‘°κ°μΌλ‘ μμ ν μ μμ΅λλ€.
λ΄ iPhoneμμ 보λΈ
2016λ 8μ 26μΌ μ€ν 10μ 44λΆμ Pedro Rodriguez [email protected]μ΄ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
sklearn νμ΄νλΌμΈμ μΌλΆλ‘ xgboostλ₯Ό μλνκ³ λμΌν λ¬Έμ κ° λ°μνμ΅λλ€. ν΄κ²°λ λκΉμ§ ν΄κ²° λ°©λ²μ΄ μμ΅λκΉ?
β
λΉμ μ΄ λκΈμ λ¬μκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ 보거λ μ€λ λλ₯Ό μμκ±°νμΈμ.
μ΄λ€ μ΄μ λ‘ νλ ¨λ λͺ¨λΈμ μ μ₯νκ³ λ‘λνλ©΄ μ€λ₯κ° λ°μνμ§ μμ΅λλ€.
bst = xgb.train(param, dtrain, num_round)
# predict is not working without this code
bst.save_model(model_file_name)
bst = xgb.Booster(param)
bst.load_model(model_file_name)
preds = bst.predict(dtest)
@bryan-woods tocsc
λ‘ λ λμ λ°©λ²μ μ°Ύμ μ μμμ΅λλ€. μ½κ°μ μ±λ₯ μ νκ° μμ μ μμ§λ§ μ‘°λ°ν νλ ¬λ‘ λ§λλ κ²λ§νΌ λμμ§λ μμ΅λλ€.
xgboostκ° μλνκΈ° μ§μ μ λ΄ sklearn νμ΄νλΌμΈμ μ΄κ²μ ν¬ν¨
class CSCTransformer(TransformerMixin):
def transform(self, X, y=None, **fit_params):
return X.tocsc()
def fit_transform(self, X, y=None, **fit_params):
self.fit(X, y, **fit_params)
return self.transform(X)
def fit(self, X, y=None, **fit_params):
return self
def get_params(self, deep=True):
return {}
CSC νμμ΄λ λ§μ§λ§ μ΄μ 0μ΄ μλ νλͺ©μ μΆκ°ν΄λ μ΅μ λ²μ μ xgboostμμ λ¬Έμ κ° ν΄κ²°λμ§ μμ΅λλ€. λ²μ 0.4a30μΌλ‘ λλ리λ κ²μ΄ μλνκ² ν μ μλ μ μΌν λ°©λ²μ λλ€. μλ μμ μμ λ€μ μ‘°μ (μ¬ν κ°λ₯ν μλ ν¬ν¨)μ κ³ λ €νμμμ€.
>>> import xgboost as xgb
>>> import numpy as np
>>> from scipy import sparse
>>>
>>> np.random.seed(10)
>>> X = sparse.rand(100,10).tocsr()
>>> test = sparse.rand(10, 500).tocsr()
>>> y = np.random.randint(2,size=100)
>>>
>>> clf = xgb.XGBClassifier()
>>> clf.fit(X,y)
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=3,
min_child_weight=1, missing=None, n_estimators=100, nthread=-1,
objective='binary:logistic', reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, seed=0, silent=True, subsample=1)
>>>
>>> try:
... pred = clf.predict_proba(test)
... print "Works when csr with version %s" %xgb.__version__
... except ValueError:
... "Broken when csr with version %s" %xgb.__version__
...
'Broken when csr with version 0.6'
>>> try:
... pred = clf.predict_proba(test.tocsc())
... print "Works when csc with version %s" %xgb.__version__
... except ValueError:
... "Still broken when csc with version %s" %xgb.__version__
...
'Still broken when csc with version 0.6'
>>> try:
... test[0,(test.shape[1]-1)] = 1.0
... pred = clf.predict_proba(test)
... print "Works when adding non-zero entries to last column with version %s" %xgb.__version__
... except ValueError:
... "Still broken when adding non-zero entries to last column with version %s" %xgb.__version__
...
/home/david.mcgarry/.conda/envs/ml/lib/python2.7/site-packages/scipy/sparse/compressed.py:730: SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
SparseEfficiencyWarning)
'Still broken when adding non-zero entries to last column with version 0.6'
>>> import xgboost as xgb
>>> import numpy as np
>>> from scipy import sparse
>>>
>>> np.random.seed(10)
>>> X = sparse.rand(100,10).tocsr()
>>> test = sparse.rand(10, 500).tocsr()
>>> y = np.random.randint(2,size=100)
>>>
>>> clf = xgb.XGBClassifier()
>>> clf.fit(X,y)
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=3,
min_child_weight=1, missing=None, n_estimators=100, nthread=-1,
objective='binary:logistic', reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, seed=0, silent=True, subsample=1)
>>>
>>> try:
... pred = clf.predict_proba(test)
... print "Works when csr with version %s" %xgb.__version__
... except ValueError:
... "Broken when csr with version %s" %xgb.__version__
...
Works when csr with version 0.4
>>> try:
... pred = clf.predict_proba(test.tocsc())
... print "Works when csc with version %s" %xgb.__version__
... except ValueError:
... "Still broken when csc with version %s" %xgb.__version__
...
Works when csc with version 0.4
>>> try:
... test[0,(test.shape[1]-1)] = 1.0
... pred = clf.predict_proba(test)
... print "Works when adding non-zero entries to last column with version %s" %xgb.__version__
... except ValueError:
... "Still broken when adding non-zero entries to last column with version %s" %xgb.__version__
...
/Users/david.mcgarry/anaconda/envs/ml/lib/python2.7/site-packages/scipy/sparse/compressed.py:739: SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
SparseEfficiencyWarning)
Works when adding non-zero entries to last column with version 0.4
λμΌν λ¬Έμ κ° μμ΅λλ€. λ§μ§λ§ 릴리μ€μμ νμ€ν λ¬Έμ κ° λ°μνμ΅λλ€. μ΄μ μλ λμΌν λ°μ΄ν° μΈνΈ λ° μ²λ¦¬μμ μ΄ λ¬Έμ κ° λ°μνμ§ μμμ΅λλ€. λ΄κ° ν릴 μλ μμ§λ§ νμ¬ sklearn APIλ₯Ό μ¬μ©νμ¬ Pythonμμ ν¬μ csr λ°°μ΄μ μ¬μ©ν λ¨μ ν
μ€νΈκ° μλ κ² κ°μ΅λλ€. μμ @dmcgarry μμ λ₯Ό tests/python/tests_with_sklearn.py
μμ΅λκΉ?
CSR μ€νμ€ λ°°μ΄κ³Ό ν¨κ» .toarray()λ₯Ό μ¬μ©νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €κ³ μλνμ§λ§ μ¬κ°ν λ¬Έμ κ° λ°μνμ΅λλ€. μ μ₯λ λͺ¨λΈμ λ‘λνκ³ μ΄λ₯Ό μ¬μ©νμ¬ .toarray()λ‘ μμΈ‘μ μλνλ©΄ μ€λ₯ λ©μμ§κ° νμλμ§ μμ§λ§ κ²°κ³Όκ° μ¬λ°λ₯΄μ§ μμ΅λλ€. 0.4a30μΌλ‘ λ‘€λ°±νλλ° μ λλ‘ μλν©λλ€. κ·Όλ³Έ μμΈμ μΆμ ν μκ°μ΄ μμμ§λ§ μ’μ§ μμ΅λλ€.
ν¬μ νλ ¬μμ 0μ΄ μλ μ΄μ μλ§ λ°ννλ DMatrix..num_col() λλ¬Έμ λ¬Έμ κ° λ°μν©λλ€. λ°λΌμ νλ ¨ λ°μ΄ν°μ ν
μ€νΈ λ°μ΄ν°μ λμΌν μμ 0μ΄ μλ μ΄μ΄ μμΌλ©΄ λͺ¨λ κ²μ΄ μ λλ‘ μλν©λλ€.
κ·Έλ μ§ μμΌλ©΄ μ ν¨μ± κ²μ¬ ν¨μκ° λ€μμ νΈμΆνκΈ° λλ¬Έμ λ€λ₯Έ κΈ°λ₯ μ΄λ¦ λͺ©λ‘μΌλ‘ λλ©λλ€.
<strong i="7">@property</strong>
def feature_names(self):
"""Get feature names (column labels).
Returns
-------
feature_names : list or None
"""
if self._feature_names is None:
return ['f{0}'.format(i) for i in range(self.num_col())]
else:
return self._feature_names
self._feature_names
λ ν¬μ νλ ¬μ κ²½μ° Noneμ΄κ³ , self.num_col()μ 0μ΄ μλ μ΄μ μλ§ λ°ννκΈ° λλ¬Έμ "to-be- μμΈ‘λ" λ°μ΄ν°λ νλ ¨ λ°μ΄ν°μ 0μ΄ μλ μ΄μ μκ³Ό λ€λ¦
λλ€.
κ°μ₯ μ’μ μ§μ μ μμ§ κ·Έκ²μ μμ νλ κ²μ λλ€.
λν @bryan-woodsκ° λ³΄κ³ ν λ΄μ©μΌλ‘ μΈν΄ ν¬μ νλ ¬ μ²λ¦¬μ κ·Όλ³Έμ μΈ λ¬Έμ κ° μλ€λ κ²μ΄ λλ ΅μ΅λλ€. "feature_names(self)"κ° λ μΈνΈμ λν΄ λμΌν κΈ°λ₯ λͺ©λ‘μ λ°ννκΈ° λλ¬Έμ μ€λ₯κ° λ°μνμ§ μμ΅λλ€. κ·Έλ¬λ κΈ°μ°¨μ ν μ€νΈ κ°μ 0μ΄ μλ μ΄ μΈλ±μ€κ° μΌμΉνμ§ μκΈ° λλ¬Έμ μμΈ‘μ΄ μλͺ»λμμ΅λλ€.
μ΄ λ¬Έμ μ λν΄ μμ ν μ¬λμ΄ μμ΅λκΉ? κ°λ°μ μ¬μ©ν μ μλ λ¨μ ν μ€νΈλ₯Ό μ΅μν κ°λ°ν μ¬λμ΄ μμ΅λκΉ?
λλ κ·Έκ²μ λν΄ μΌνμ§ μμμ§λ§ μμ @dmcgarry μ μλ λ¨μ ν μ€νΈμ μμμΌλ‘ μ¬μ©λ μ μλ€κ³ μκ°ν©λλ€.
import xgboost as xgb
import numpy as np
import scipy.sparse
def test_xgbclassifier_sklearn_sparse():
np.random.seed(10)
X = scipy.sparse.rand(100,10).tocsr()
test = scipy.sparse.rand(10, 500).tocsr()
y = np.random.randint(2,size=100)
clf = xgb.XGBClassifier()
clf.fit(X,y)
pred = clf.predict_proba(test)
μ μ₯μμ ν¬ν¬μμ λͺ κ°μ§ μλ‘μ΄ ν¬μ λ°°μ΄ ν
μ€νΈλ₯Ό λ§λ€μμ΅λλ€. κ΄μ¬ μλ λΆλ€μ μν΄:
https://github.com/bryan-woods/xgboost/blob/sparse_test/tests/python/test_scipy_sparse.py
체ν¬μμμ λ£¨νΈ λλ ν 리μμ ν
μ€νΈλ₯Ό μ€ννλ €λ©΄:
νμ΄μ¬ -m μ½ ν
μ€νΈ/python/test_scipy_sparse.py
λ ν μ€νΈ λͺ¨λ μ€ν¨νμμ μ μ μμ΅λλ€. μ΄κ²μ μ΅μν κ°λ°ν ν μ€νΈλ₯Ό μ 곡ν κ²μ λλ€.
μ λ μ΄ λ¬Έμ λ₯Ό κ²ͺκ³ μμ§λ§ libμμ μ΅μ’ μ μΌλ‘ ν΄κ²°λ λκΉμ§ ν΄κ²°νλ κ°μ₯ μ’μ λ°©λ²μ μ μ μμ΅λλ€.
maxid:0 κ³Ό κ°μ μ΅λ κΈ°λ₯ μΈλ±μ€λ₯Ό μ¬μ©νμ¬ κΈ°λ₯ λͺ©λ‘μ κΈ°λ₯μ μΆκ°ν μ μμ΅λλ€
λ°μ΄ν° νλ μμ μ λ¬νλ©΄ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
μ΄λ»κ² λ²μ 0.4λ‘ λλ릴 μ μμ΅λκΉ?
ν μ€μΉ --μ κ·Έλ μ΄λ xgboost==0.4a30
λͺ¨λ μ νμ ν¬μ νλ ¬μ΄ μλνμ§ μμμ΅λλ€(μ λ tf-idf λ°μ΄ν°λ‘ μμ μ€μ λλ€). μ΄μ λ²μ μΌλ‘ λλλ €μΌ νμ΅λλ€. ν κ³ λ§μ!
μ¬μ ν λ¬Έμ κ° μλ λͺ¨λ μ¬μ©μ: μ¬μ© μ€μΈ μ½λμ #1606μ μμ μ¬νμ΄ ν¬ν¨λμ΄ μμ΅λκΉ?
μ, λ§μ§λ§ λ²μ μ xgboostλ₯Ό μ€μΉνλλ° μ¬μ ν μ΄ λ¬Έμ κ° μμ΅λλ€.
μ΄κ²μ μ¬μ ν ββμ‘΄μ¬νλ©° μ½κ² μ¬νν μ μμ΅λλ€. μΆ©λΆν ν° λ°μ΄ν° μΈνΈλ₯Ό μ¬μ©νλ κ²½μ° μ΄κ²μ λ°μν κ°λ₯μ±μ΄ μ μ§λ§, μ΄λ₯Ό 그리λ κ²μ κ°μ²΄λ‘ λννλ κ²½μ° train/cv ν μ€νΈ μΈνΈμμ μ¬μ© κ°λ₯ν κΈ°λ₯μ΄ λ€λ₯Έ cv λΆν λ΄μμ κ±°μ νμ€νκ² λ°μν©λλ€.
μμ§ν λ§ν΄μ DMatrixκ° scipy ν¬μ νλ ¬μμ μ 곡νλ λͺ¨μ ννΈλ₯Ό 무μνλ μ΄μ λ₯Ό μ λͺ¨λ₯΄κ² μ΅λλ€. ν¬κΈ°λ₯Ό κ³μ°νλ λμ μ 보λ₯Ό κΈ°λ°μΌλ‘ μ€μ ν΄μΌ ν©λλ€.
Xgboost Python κΈ°λ³Έ API(0.6)λ₯Ό μ¬μ© μ€μ΄λ©° LIBSVM [sparse] νμ νμΌμμ DMatrixλ₯Ό λ‘λν λ λμΌν μ€λ₯κ° λ°μν©λλ€. ν¬ν¨λ νμ λ§μ§λ§ μ΄μ΄ μ μλμ΄ μλ κ²½μ°μ λλ€. λ΄ ν΄κ²° λ°©λ²μ 첫 λ²μ§Έ νμ λλ―Έ μ΄μ μ μνλ κ²μ λλ€.
train_fv_file = 'train_fv_eval.svm'
dtrain = xgb.DMatrix(train_fv_file, feature_names=feature_vector_labels, feature_types=feature_vector_types)
μ¬ννκΈ°κ° λ무 μ½λ€λ©΄ μ¬ν κ°λ₯ν μλ₯Ό μ 곡νλ λ° κ΄μ¬μ΄ μλ μ¬λμ΄ μμ΅λκΉ? λ°λμ§νκ²λ sklearn λ μ΄μ΄ μμ΄(κ°λ₯ν μμΈμ λΆλ¦¬νκΈ° μν΄).
@gabrielspmoreira : λ§μ§λ§ λͺ κ°μ μ΄μ΄ μμ ν ν¬λ°ν LIBSVM νμΌμμ λ‘λνλ κ²μ λν κ·νμ μμ μ μ μ μμ΅λλ€... ν΄λΉ DMatrix κ΅¬μ± λ°©λ²μ num_col
ννΈλ μμΌλ©΄ λμμ΄ λ©λλ€.
In [42]: matrix = xgboost.DMatrix(scipy.sparse.csr_matrix([[0, 2, 3, 0], [0, 2, 2, 0], [1, 0, 5, 0], [0, 1, 0, 0]], shape=(4,4)))
In [43]: matrix.num_col()
Out[43]: 3L
ν/μ΄μ νμ μνμ μ DMatrixκ° μμ±λ λλ§λ€ μ΄λ¬ν μΌμ΄ λ°μν κ°λ₯μ±μ΄ μμ΅λλ€(DMatrixμ μ΄μ΄ λͺ κ°μΈμ§ λͺ μμ μΌλ‘ μλ €μ€¬μμλ λΆκ΅¬νκ³ μ΄ μλ μ€μ΄λλλ€). μ΄λ νμ μ§ν©μ΄ λͺ¨λ 0μΌ κ°λ₯μ±μ΄ λ λκΈ° λλ¬Έμ λ μμ λ°μ΄ν° μΈνΈ λλ λ§€μ° ν¬μν μ΄μ λν΄ μμ£Ό λ°μν©λλ€.
μ΄κ²μ΄ νλ ¨/ν μ€νΈ μΈνΈ μ¬μ΄μ λ°μνλ©΄ λͺ¨λΈμ λ€λ₯Έ μμ κΈ°λ₯μ κΈ°λνκ³ ValueErrorλ₯Ό λ΄λΏκΈ° λλ¬Έμ ν μ€νΈ μΈνΈλ₯Ό νκ°ν μ μμ΅λλ€.
λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ νμ ν λ xgboost μ½μ΄μ sklearn-wrapper λ΄μμ μ΄κ²μ΄ μλ/μλνμ§ μλ ν μ€νΈλ₯Ό μ°ΎμΌλ €κ³ λ Έλ ₯νκ³ μμ§λ§ μ΄λμμ μΌμ΄λκ³ μλμ§ λͺ¨λ₯΄κ² μ΅λλ€.
@l3link : κ·νμ μ½λκ° μ€λλ κ² κ°μ΅λλ€. λ΄κ° μ»λ κ²μ λ€μκ³Ό κ°μ΅λλ€.
In [2]: import scipy
...: import xgboost
...: matrix = xgboost.DMatrix(scipy.sparse.csr_matrix([[0, 2, 3, 0], [0, 2, 2, 0], [1, 0, 5, 0], [0, 1, 0, 0]], shape=(4,4)))
...: matrix.num_col()
...:
Out[2]: 4L
In [3]: matrix._init_from_csr??
Signature: matrix._init_from_csr(csr)
Source:
def _init_from_csr(self, csr):
"""
Initialize data from a CSR matrix.
"""
if len(csr.indices) != len(csr.data):
raise ValueError('length mismatch: {} vs {}'.format(len(csr.indices), len(csr.data)))
self.handle = ctypes.c_void_p()
_check_call(_LIB.XGDMatrixCreateFromCSREx(c_array(ctypes.c_size_t, csr.indptr),
c_array(ctypes.c_uint, csr.indices),
c_array(ctypes.c_float, csr.data),
len(csr.indptr), len(csr.data),
csr.shape[1],
ctypes.byref(self.handle)))
File: c:\anaconda2\lib\site-packages\xgboost-0.6-py2.7.egg\xgboost\core.py
Type: instancemethod
λ,
In [64]: xgboost.__version__
Out[64]: '0.6'
Signature: matrix._init_from_csr(csr)
Source:
def _init_from_csr(self, csr):
"""
Initialize data from a CSR matrix.
"""
if len(csr.indices) != len(csr.data):
raise ValueError('length mismatch: {} vs {}'.format(len(csr.indices), len(csr.data)))
self.handle = ctypes.c_void_p()
_check_call(_LIB.XGDMatrixCreateFromCSR(c_array(ctypes.c_ulong, csr.indptr),
c_array(ctypes.c_uint, csr.indices),
c_array(ctypes.c_float, csr.data),
len(csr.indptr), len(csr.data),
ctypes.byref(self.handle)))
File: ~/anaconda/lib/python2.7/site-packages/xgboost/core.py
Type: instancemethod
λ΄ .6 λ²μ μ λͺ¨μμ μ·¨νμ§ μλ XGDMatrixCreateFromCSREx λͺ
λ Ή λμ XGDMatrixCreateFromCSRμ΄ μλ€λ κ²μ΄ μ΄μνκ² λ³΄μ
λλ€.
osx λ°°ν¬κ° λ€λ₯Ό μ μμ΅λκΉ?
λν @bryan-woodsκ° λ³΄κ³ ν λ΄μ©μΌλ‘ μΈν΄ ν¬μ νλ ¬ μ²λ¦¬μ κ·Όλ³Έμ μΈ λ¬Έμ κ° μλ€λ κ²μ΄ λλ ΅μ΅λλ€. "feature_names(self)"κ° λ μΈνΈμ λν΄ λμΌν κΈ°λ₯ λͺ©λ‘μ λ°ννκΈ° λλ¬Έμ μ€λ₯κ° λ°μνμ§ μμ΅λλ€. κ·Έλ¬λ κΈ°μ°¨μ ν μ€νΈ κ°μ 0μ΄ μλ μ΄ μΈλ±μ€κ° μΌμΉνμ§ μκΈ° λλ¬Έμ μμΈ‘μ΄ μλͺ»λμμ΅λλ€.
λκ΅°κ° μ΄ μ§λ¬Έμ λλ΅ν΄ μ£Όμκ² μ΅λκΉ? 0.4 λ²μ μΌλ‘ λλλ Έκ³ μ΄μ μλνλ κ² κ°μ§λ§ μ¬μ ν ν¬μ νλ ¬μ μ¬μ©νκ³ μκΈ° λλ¬Έμ μ λλ‘ μλνλμ§ κ±±μ λ©λλ€.
@l3link μ΄μ νμ§ μμ΅λλ€. λ²μ λ²νΈ(λλ pypi ν¨ν€μ§)λ λλλ‘ μ€λ«λμ μ λ°μ΄νΈλμ§ μμ΅λλ€. μλ₯Ό λ€μ΄ μ€λ νμ¬ https://github.com/dmlc/xgboost/blob/master/python-package/xgboost/VERSION νμΌμ 7μ 29μΌμ λ§μ§λ§μΌλ‘ λ³κ²½λμμΌλ©° λ§μ§λ§ pypi ν¨ν€μ§λ https://pypi.pythonμ λλ€. org/pypi/xgboost/μ λ μ§λ 8μ 9μΌμ λλ€. μμ μ¬νμ΄ 9μ 23μΌ #1606μ μ μΆλ λμ. githubμμ μ΅μ μ½λλ₯Ό νμΈνμΈμ.
ν¬λ DataFrame
(λΉν¬μ νν)λ₯Ό μ¬μ©ν λ μ΄ λ¬Έμ κ° λ°μνμ΅λλ€.
numpy ndarray
λ₯Ό ν΅ν΄ df.as_matrix()
λ‘ λ³ννκ³ μ€λ₯λ₯Ό μ κ±°νμ΅λλ€.
λ°μ΄ν° νλ μμ λ°°μ΄λ‘ λ³νν ν μ΄ μ€λ₯λ μ κ±°νμ΅λλ€.
ν
μ€νΈ μΈνΈμ μ΄μ κΈ°μ°¨ μΈνΈμ κ°μ μμλ‘ μ¬μ λ ¬νλ©΄ μ΄ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
Pandas λ°μ΄ν° νλ μμ μ¬μ©νμ΅λλ€. μ΄κ²μ΄ μμΌλ©΄ .as_matrix()
λ₯Ό μ¬μ©νλ©΄ λμΌν λ¬Έμ κ° λ°μν©λλ€.
λλ νλ€:
test = test[train.columns]
@warpuv μ루μ μ μλ
κΈ°μ°¨/ν μ€νΈ csr νλ ¬μ cscλ‘ λ³ννλ κ²μ΄ ν¨κ³Όμ μ΄μμ΅λλ€.
Xtrain = scipy.sparse.csc_matrix(Xtrain)
csc_matrix
λ³ννλ μμ
μ 0.6a2
μμ ν
μ€νΈλμμ΅λλ€.
X_train = scipy.sparse.csc_matrix(X_train)
X_test = scipy.sparse.csc_matrix(X_test)
xgb_train = xgb.DMatrix(X_train, label=y_train)
xgb_test = xgb.DMatrix(X_test, label=y_test)
type(X_train) <class 'scipy.sparse.csr.csr_matrix'>
type(X_test) <class 'scipy.sparse.csr.csr_matrix'>
type(X_train) <class 'scipy.sparse.csc.csc_matrix'>
type(X_test) <class 'scipy.sparse.csc.csc_matrix'>
type(xgb_train) <class 'xgboost.core.DMatrix'>
type(xgb_test) <class 'xgboost.core.DMatrix'>
λ΄ μλ ν¬μ νλ ¬μ csr_matrix
νμμ sklearn tf-idf 벑ν°λΌμ΄μ μ μΆλ ₯μ
λλ€.
μμ§ μμ μ¬νμ΄ μμ΅λκΉ?
λ°©κΈ python3μμ μ΅μ λ²μ (0.7.post3)μ λΉλνμΌλ©° μ΄ λ¬Έμ κ° μ¬μ ν μ‘΄μ¬ν¨μ νμΈν μ μμ΅λλ€. μμ @dmcgarry μμ λ₯Ό μ μ©ν csr_matrix
λ° csc_matrix
λͺ¨λμ μ¬μ ν λ¬Έμ κ° μμ΅λλ€.
import xgboost as xgb
import numpy as np
from scipy import sparse
np.random.seed(10)
X_csr = sparse.rand(100, 10).tocsr()
test_csr = sparse.rand(10, 500).tocsr()
X_csc = sparse.rand(100, 10).tocsc()
test_csc = sparse.rand(10, 500).tocsc()
y = np.random.randint(2, size=100)
clf_csr = xgb.XGBClassifier()
clf_csr.fit(X_csr, y)
clf_csc = xgb.XGBClassifier()
clf_csc.fit(X_csc, y)
# Try with csr
try:
pred = clf_csr.predict_proba(test_csr)
print("Works when csr with version %s" %xgb.__version__)
except ValueError:
print("Broken when csr with version %s" %xgb.__version__)
try:
test_csr[0,(test_csr.shape[1]-1)] = 1.0
pred = clf_csr.predict_proba(test_csr)
print("Works when adding non-zero entries to last column with version %s" %xgb.__version__)
except:
print("Still broken when adding non-zero entries to last column with version %s" %xgb.__version__)
# Try with csc
try:
pred = clf_csc.predict_proba(test_csc)
print("Works when csc with version %s" %xgb.__version__)
except ValueError:
print("Broken when csc with version %s" %xgb.__version__)
try:
test_csc[0,(test_csc.shape[1]-1)] = 1.0
pred = clf_csc.predict_proba(test_csc)
print("Works when adding non-zero entries to last column with version %s" %xgb.__version__)
except:
print("Still broken when adding non-zero entries to last column with version %s" %xgb.__version__)
μ μ½λμ κ²°κ³Όλ λ€μκ³Ό κ°μ΅λλ€.
Broken when csr with version 0.7
Still broken when adding non-zero entries to last column with version 0.7
Broken when csc with version 0.7
Still broken when adding non-zero entries to last column with version 0.7
λμμ£ΌμΈμ
μ΄ λ¬Έμ κ° μ’ λ£λ μ΄μ λ 무μμ λκΉ?
λλ μ΅κ·Όμ λ λ²μ΄ λ¬Έμ λ₯Ό κ²ͺμμ΅λλ€. ν κ°μ§ κ²½μ°μλ μ λ ₯ λ°μ΄ν° νλ μμ λ°°μ΄λ‘ λ³κ²½νκΈ°λ§ νλ©΄ μλν©λλ€. λ λ²μ§Έ κ²½μ° test_df = test_df[train_df.columns]λ₯Ό μ¬μ©νμ¬ ν μ€νΈ λ°μ΄ν° νλ μμ μ΄ μ΄λ¦μ μ¬μ λ ¬ν΄μΌ ν©λλ€. λ κ²½μ° λͺ¨λ train_df λ° test_dfλ μ νν λμΌν μ΄ μ΄λ¦μ κ°μ΅λλ€.
@CathyQian κ·νμ μ견μ μ΄ν΄νμ§ λͺ»νλ κ² κ°μ΅λλ€. train_df
/ test_df
ν¬μν©λκΉ? λν μ΄λ¬ν λ¬Έμ κ° λ°μνμ λ μ΄λ€ λ²μ μ xgboostλ₯Ό μ€ννκ³ μμμ΅λκΉ?
@CathyQian xgboostλ μ΄μ _order_μ μμ‘΄νλ©° μ΄λ μ΄ λ¬Έμ μ κ΄λ ¨μ΄ μμ΅λλ€.
@ewellinger WRT μ: 10κ° κΈ°λ₯μ΄ μλ λ°μ΄ν°μ λν΄ νλ ¨λ λͺ¨λΈμ μμΈ‘μ μν΄ 500κ° κΈ°λ₯μ΄ μλ λ°μ΄ν°λ₯Ό νμ©νμ§ μμμΌ νλ―λ‘ μ€λ₯κ° λ°μν©λλ€. λν λͺ¨λ νλ ¬μμ DMatricesλ₯Ό λ§λ€κ³ num_col λ° num_rowλ₯Ό κ²μ¬νλ©΄ μμν κ²°κ³Όκ° μμ±λ©λλ€.
"ν¬μμ± λ¬Έμ "μ νμ¬ μνλ λ€μκ³Ό κ°μ΅λλ€.
@warpuv κ·Έκ²μ μ μκ² ν¨κ³Όμ μ λλ€. κ°μ¬ν©λλ€.
μ‘°λ°ν νλ ¬μμ λμΌν μ€λ₯κ° λ°μνμ΅λλ€. ( μ΅μ μλμ½λ€μ xgboost v.0.6.)
νλ ¨ μνμ λ€λ₯Έ κΈ°λ₯ νμ μ§ν©μ λν΄ μ¬λ¬ νκ·λ₯Ό μ€νν λ μ€λ₯κ° λ°μνμ΅λλ€.
λ€μ νκ·λ₯Ό λ§μΆκΈ° μ μ λ§€λ² μ λͺ¨λΈ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
- libsvm λ°μ΄ν°λ₯Ό DMatrixμ λ‘λν λ 미리 μ μλ μ΄ μλ₯Ό μ§μ νλ 맀κ°λ³μλ μμ§ κ΅¬νλμ§ μμμ΅λλ€. κΈ°μ¬ν μμλ΄μ¬μλ₯Ό νμν©λλ€.
0.8λΆν° μ΄κ±° μμ§ μμμμ?
CSCμμ DMatrix μμ±μ μ¬λ°λ₯Έ μ°¨μμ κ°μ²΄λ₯Ό μμ±νμ§λ§ λ§μ§λ§ νμ΄ μμ ν ν¬μμΈ κ²½μ° νλ ¨ λλ μμΈ‘ μ€μ μλͺ»λ κ²°κ³Όλ₯Ό μ 곡ν μ μμ΅λλ€ #2630. μμ§ κ·Έ λΆλΆμ μ λλ‘ κ³ μΉ μκ°μ΄ μμλ€.
@khotilov #3553μ΄ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
libsvm λ°μ΄ν°λ₯Ό DMatrixμ λ‘λν λ 미리 μ μλ μ΄ μλ₯Ό μ§μ νλ 맀κ°λ³μλ μμ§ κ΅¬νλμ§ μμμ΅λλ€. κΈ°μ¬ν μμλ΄μ¬μλ₯Ό νμν©λλ€.
@MonsieurWave μ΄ κΈ°λ₯μ κ²½μ° dmlc-coreμ λν μμ pull μμ²μ΄ νΈλ¦μ μνν΄μΌ ν©λλ€. λ΄κ° κ·Έκ²μ 보μ.
@hcho3 κ°μ¬ν©λλ€.
μ§κΈμ libsvmμ 첫 λ²μ§Έ μ€μ λ무 ν¬λ°νμ§ μκ² νμ¬ μ΄ λ¬Έμ λ₯Ό μ°νν©λλ€. μ¦, κ°μ΄ 0μΈ μ΄λ μ μ₯ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
ν¬μ νλ ¬μμ 0μ΄ μλ μ΄μ μλ§ λ°ννλ DMatrix..num_col() λλ¬Έμ λ¬Έμ κ° λ°μν©λλ€. λ°λΌμ νλ ¨ λ°μ΄ν°μ ν μ€νΈ λ°μ΄ν°μ λμΌν μμ 0μ΄ μλ μ΄μ΄ μμΌλ©΄ λͺ¨λ κ²μ΄ μ λλ‘ μλν©λλ€.
κ·Έλ μ§ μμΌλ©΄ μ ν¨μ± κ²μ¬ ν¨μκ° λ€μμ νΈμΆνκΈ° λλ¬Έμ λ€λ₯Έ κΈ°λ₯ μ΄λ¦ λͺ©λ‘μΌλ‘ λλ©λλ€.
self._feature_names
λ ν¬μ νλ ¬μ κ²½μ° Noneμ΄κ³ , self.num_col()μ 0μ΄ μλ μ΄μ μλ§ λ°ννκΈ° λλ¬Έμ "to-be- μμΈ‘λ" λ°μ΄ν°λ νλ ¨ λ°μ΄ν°μ 0μ΄ μλ μ΄μ μκ³Ό λ€λ¦ λλ€.κ°μ₯ μ’μ μ§μ μ μμ§ κ·Έκ²μ μμ νλ κ²μ λλ€.