Bug mixing DMatrix's with and without feature names

This commit is contained in:
sinhrks
2016-04-29 13:51:34 +09:00
parent ff4dda2102
commit 6bab164d80
4 changed files with 25 additions and 14 deletions

View File

@@ -513,7 +513,10 @@ class DMatrix(object):
-------
feature_names : list or None
"""
return self._feature_names
if self._feature_names is None:
return ['f{0}'.format(i) for i in range(self.num_col())]
else:
return self._feature_names
@property
def feature_types(self):
@@ -567,7 +570,7 @@ class DMatrix(object):
"""
if feature_types is not None:
if self.feature_names is None:
if self._feature_names is None:
msg = 'Unable to set feature types before setting names'
raise ValueError(msg)

View File

@@ -497,17 +497,8 @@ class XGBClassifier(XGBModel, XGBClassifierBase):
"""
b = self.booster()
fs = b.get_fscore()
if b.feature_names is None:
keys = [int(k.replace('f', '')) for k in fs.keys()]
all_features_dict = dict.fromkeys(range(0, self._features_count), 0)
fs_dict = dict(zip(keys, fs.values()))
all_features_dict.update(fs_dict)
all_features = np.fromiter(all_features_dict.values(),
dtype=np.float32)
else:
all_features = [fs.get(f, 0.) for f in b.feature_names]
all_features = np.array(all_features, dtype=np.float32)
all_features = [fs.get(f, 0.) for f in b.feature_names]
all_features = np.array(all_features, dtype=np.float32)
return all_features / all_features.sum()