Commit a4ab1553 authored by wxchan's avatar wxchan Committed by Guolin Ke
Browse files

[python] refine: solve several trivial issues (#753)

* refine python codes

* fix appveryor test

* add note to feature_importances
parent e7c53270
...@@ -23,7 +23,7 @@ test_script: ...@@ -23,7 +23,7 @@ test_script:
- conda info -a - conda info -a
- conda install --yes numpy scipy scikit-learn pandas matplotlib - conda install --yes numpy scipy scikit-learn pandas matplotlib
- pip install pep8 pytest - pip install pep8 pytest
- pytest tests/c_api_test/test.py - pytest tests/c_api_test/test_.py
- "set /p LGB_VER=< VERSION.txt" - "set /p LGB_VER=< VERSION.txt"
- cd python-package && python setup.py sdist --formats gztar - cd python-package && python setup.py sdist --formats gztar
- cd dist - cd dist
......
...@@ -224,10 +224,6 @@ PANDAS_DTYPE_MAPPER = {'int8': 'int', 'int16': 'int', 'int32': 'int', ...@@ -224,10 +224,6 @@ PANDAS_DTYPE_MAPPER = {'int8': 'int', 'int16': 'int', 'int32': 'int',
def _data_from_pandas(data, feature_name, categorical_feature, pandas_categorical): def _data_from_pandas(data, feature_name, categorical_feature, pandas_categorical):
if isinstance(data, DataFrame): if isinstance(data, DataFrame):
if feature_name == 'auto' or feature_name is None: if feature_name == 'auto' or feature_name is None:
if all([isinstance(name, integer_types + (np.integer, )) for name in data.columns]):
msg = """Using Pandas (default) integer column names, not column indexes. You can use indexes with DataFrame.values."""
warnings.filterwarnings('once')
warnings.warn(msg, stacklevel=5)
data = data.rename(columns=str) data = data.rename(columns=str)
cat_cols = data.select_dtypes(include=['category']).columns cat_cols = data.select_dtypes(include=['category']).columns
if pandas_categorical is None: # train dataset if pandas_categorical is None: # train dataset
...@@ -624,6 +620,8 @@ class Dataset(object): ...@@ -624,6 +620,8 @@ class Dataset(object):
self.max_bin = max_bin self.max_bin = max_bin
self.predictor = predictor self.predictor = predictor
params["max_bin"] = max_bin params["max_bin"] = max_bin
if "verbosity" in params:
params.setdefault("verbose", params.pop("verbosity"))
if silent: if silent:
params["verbose"] = 0 params["verbose"] = 0
elif "verbose" not in params: elif "verbose" not in params:
...@@ -642,8 +640,8 @@ class Dataset(object): ...@@ -642,8 +640,8 @@ class Dataset(object):
else: else:
raise TypeError("Wrong type({}) or unknown name({}) in categorical_feature" raise TypeError("Wrong type({}) or unknown name({}) in categorical_feature"
.format(type(name).__name__, name)) .format(type(name).__name__, name))
if categorical_indices:
params['categorical_column'] = sorted(categorical_indices) params['categorical_column'] = sorted(categorical_indices)
params_str = param_dict_to_str(params) params_str = param_dict_to_str(params)
"""process for reference dataset""" """process for reference dataset"""
...@@ -1222,6 +1220,8 @@ class Booster(object): ...@@ -1222,6 +1220,8 @@ class Booster(object):
self.best_iteration = -1 self.best_iteration = -1
self.best_score = {} self.best_score = {}
params = {} if params is None else params params = {} if params is None else params
if "verbosity" in params:
params.setdefault("verbose", params.pop("verbosity"))
if silent: if silent:
params["verbose"] = 0 params["verbose"] = 0
elif "verbose" not in params: elif "verbose" not in params:
......
...@@ -454,9 +454,13 @@ class LGBMModel(LGBMModelBase): ...@@ -454,9 +454,13 @@ class LGBMModel(LGBMModelBase):
@property @property
def feature_importances_(self): def feature_importances_(self):
"""Get normailized feature importances.""" """
importace_array = self.booster_.feature_importance().astype(np.float32) Get feature importances.
return importace_array / importace_array.sum()
Note: feature importance in sklearn interface used to normalize to 1,
it's deprecated after 2.0.4 and same as Booster.feature_importance() now
"""
return self.booster_.feature_importance()
@LGBMDeprecated('Use attribute booster_ instead.') @LGBMDeprecated('Use attribute booster_ instead.')
def booster(self): def booster(self):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment