Python 3.6 - SciKitLearn - 模块没有属性 'CategoricalEncoder'
Python 3.6 - SciKitLearn - module has no attribute 'CategoricalEncoder'
我正在跟书'Hands-on Machine Learning with Scikit-Learn & Tensorflow'。
现在,我正在尝试使用 sklearn 的 CategoricalEncoder
,但 python 拒绝接受它。
这是我现在的代码:
from util.fetch import *
from data.data import *
import matplotlib.pyplot as plot
from sklearn.model_selection import *
from sklearn.preprocessing import *
from sklearn.pipeline import *
import pandas.plotting as pdp
def main():
#
# Basic Data Exploration
#
fetch_housing_data()
housing = load_housing_data()
housing.hist(bins=50, figsize=(20,15))
plot.savefig(os.path.join('datasets', 'histogram.png'))
#
# Creating a Test Set
#
train_set, test_set = train_test_split(housing, test_size=0.2, random_state=42)
housing['income_cat'] = np.ceil(housing['median_income'] / 1.5)
housing['income_cat'].where(housing['income_cat'] < 5, 5.0, inplace=True)
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(housing, housing['income_cat']):
strat_train_set = housing.loc[train_index]
strat_test_set = housing.loc[test_index]
for set_ in (strat_train_set, strat_test_set):
set_.drop('income_cat', axis=1, inplace=True)
#
# In-depth exploration of Training Data
#
housing = strat_train_set.copy()
#
# Plot Geographical Data
#
housing.plot(
kind='scatter',
x='longitude',
y='latitude',
alpha=0.4,
s=housing['population']/100,
label='population',
figsize=(10,7),
c='median_house_value',
cmap=plot.get_cmap('jet'),
colorbar=True)
#plot.show()
plot.savefig(os.path.join('datasets','geodata.png'))
corr_matrix = housing.corr()
print(corr_matrix['median_house_value'].sort_values(ascending=False))
attributes = ['median_house_value','median_income','total_rooms','housing_median_age']
pdp.scatter_matrix(housing[attributes], figsize=(12,8))
plot.savefig(os.path.join('datasets', 'scatter_matrix.png'))
housing.plot(
kind='scatter',
x='median_income',
y='median_house_value',
alpha=0.1)
plot.savefig(os.path.join('datasets', 'median_income-median_house_value.png'))
housing['rooms_per_household'] = housing['total_rooms'] / housing['households']
housing['bedrooms_per_room'] = housing['total_bedrooms'] / housing['total_rooms']
housing['population_per_household'] = housing['population'] / housing['households']
corr_matrix = housing.corr()
corr_file = open(os.path.join('datasets','median_house_value_corr.txt'), 'w+')
corr_file.write(str(corr_matrix['median_house_value'].sort_values(ascending=False)))
corr_file.close()
#
# Preparing data for Machine Learning Algorithms
#
housing = strat_train_set.drop('median_house_value', axis=1)
housing_labels = strat_train_set['median_house_value'].copy()
num_attribs = list(housing_num)
cat_attribs = ['ocean_proximity']
num_pipeline: Pipeline = Pipeline([
('selector', DataFrameSelector(num_attribs)),
('imputer', Imputer(strategy='median')),
('attribs_adder', CombinedAttributesAdder()),
('std_scaler', StandardScaler()),
])
cat_pipeline: Pipeline = Pipeline([
('selector', DataFrameSelector(cat_attribs)),
('cat_encoder', CategoricalEncoder(encoding='onehot-dense'))
])
full_pipeline = FeatureUnion(transformer_list=[
('num_pipeline', num_pipeline),
('cat_pipeline', cat_pipeline),
])
if __name__ == '__main__':
main()
不过这在最后给我带来了问题,当它到达第 123 行时,我收到以下错误:
Traceback (most recent call last):
File "***/Housing/main.py", line 133, in <module>
main()
File "***/Housing/main.py", line 123, in main
('cat_encoder', CategoricalEncoder(encoding='onehot-dense'))
NameError: name 'CategoricalEncoder' is not defined
(我审查了堆栈跟踪中的路径)
我试过各种方法让它正确导入,但不幸的是我失败了。使用任何其他 sklearn classes 都没有任何问题,只是 CategoricalEncoder。书中提到 CategoricalEncoder class 比较新,可能还没有出来,是这样吗?
我已经查看了 sklearn 文档,它们提供了实现此功能的源代码的链接,但是当我在虚拟环境中查看相应文件时,我至少遗漏了 400-500 行代码.我正在使用 PyCharm 并让它根据需要安装所有依赖项。
(我知道最后的管道现在不是 运行,因为脚本在此之前停止执行,所以这不是真正的问题...)
CategoricalEncoder
仅在开发版本 0.20.dev0 中可用。这个版本不会被 pip、conda 或任何其他包管理器自动安装,如果你想使用那个版本,你需要专门安装它。
在这种情况下,您必须按照 Sklean - Advanced Installation - Install Bleeding Edge 中的说明获取开发版本。
我正在跟书'Hands-on Machine Learning with Scikit-Learn & Tensorflow'。
现在,我正在尝试使用 sklearn 的 CategoricalEncoder
,但 python 拒绝接受它。
这是我现在的代码:
from util.fetch import *
from data.data import *
import matplotlib.pyplot as plot
from sklearn.model_selection import *
from sklearn.preprocessing import *
from sklearn.pipeline import *
import pandas.plotting as pdp
def main():
#
# Basic Data Exploration
#
fetch_housing_data()
housing = load_housing_data()
housing.hist(bins=50, figsize=(20,15))
plot.savefig(os.path.join('datasets', 'histogram.png'))
#
# Creating a Test Set
#
train_set, test_set = train_test_split(housing, test_size=0.2, random_state=42)
housing['income_cat'] = np.ceil(housing['median_income'] / 1.5)
housing['income_cat'].where(housing['income_cat'] < 5, 5.0, inplace=True)
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(housing, housing['income_cat']):
strat_train_set = housing.loc[train_index]
strat_test_set = housing.loc[test_index]
for set_ in (strat_train_set, strat_test_set):
set_.drop('income_cat', axis=1, inplace=True)
#
# In-depth exploration of Training Data
#
housing = strat_train_set.copy()
#
# Plot Geographical Data
#
housing.plot(
kind='scatter',
x='longitude',
y='latitude',
alpha=0.4,
s=housing['population']/100,
label='population',
figsize=(10,7),
c='median_house_value',
cmap=plot.get_cmap('jet'),
colorbar=True)
#plot.show()
plot.savefig(os.path.join('datasets','geodata.png'))
corr_matrix = housing.corr()
print(corr_matrix['median_house_value'].sort_values(ascending=False))
attributes = ['median_house_value','median_income','total_rooms','housing_median_age']
pdp.scatter_matrix(housing[attributes], figsize=(12,8))
plot.savefig(os.path.join('datasets', 'scatter_matrix.png'))
housing.plot(
kind='scatter',
x='median_income',
y='median_house_value',
alpha=0.1)
plot.savefig(os.path.join('datasets', 'median_income-median_house_value.png'))
housing['rooms_per_household'] = housing['total_rooms'] / housing['households']
housing['bedrooms_per_room'] = housing['total_bedrooms'] / housing['total_rooms']
housing['population_per_household'] = housing['population'] / housing['households']
corr_matrix = housing.corr()
corr_file = open(os.path.join('datasets','median_house_value_corr.txt'), 'w+')
corr_file.write(str(corr_matrix['median_house_value'].sort_values(ascending=False)))
corr_file.close()
#
# Preparing data for Machine Learning Algorithms
#
housing = strat_train_set.drop('median_house_value', axis=1)
housing_labels = strat_train_set['median_house_value'].copy()
num_attribs = list(housing_num)
cat_attribs = ['ocean_proximity']
num_pipeline: Pipeline = Pipeline([
('selector', DataFrameSelector(num_attribs)),
('imputer', Imputer(strategy='median')),
('attribs_adder', CombinedAttributesAdder()),
('std_scaler', StandardScaler()),
])
cat_pipeline: Pipeline = Pipeline([
('selector', DataFrameSelector(cat_attribs)),
('cat_encoder', CategoricalEncoder(encoding='onehot-dense'))
])
full_pipeline = FeatureUnion(transformer_list=[
('num_pipeline', num_pipeline),
('cat_pipeline', cat_pipeline),
])
if __name__ == '__main__':
main()
不过这在最后给我带来了问题,当它到达第 123 行时,我收到以下错误:
Traceback (most recent call last):
File "***/Housing/main.py", line 133, in <module>
main()
File "***/Housing/main.py", line 123, in main
('cat_encoder', CategoricalEncoder(encoding='onehot-dense'))
NameError: name 'CategoricalEncoder' is not defined
(我审查了堆栈跟踪中的路径)
我试过各种方法让它正确导入,但不幸的是我失败了。使用任何其他 sklearn classes 都没有任何问题,只是 CategoricalEncoder。书中提到 CategoricalEncoder class 比较新,可能还没有出来,是这样吗?
我已经查看了 sklearn 文档,它们提供了实现此功能的源代码的链接,但是当我在虚拟环境中查看相应文件时,我至少遗漏了 400-500 行代码.我正在使用 PyCharm 并让它根据需要安装所有依赖项。
(我知道最后的管道现在不是 运行,因为脚本在此之前停止执行,所以这不是真正的问题...)
CategoricalEncoder
仅在开发版本 0.20.dev0 中可用。这个版本不会被 pip、conda 或任何其他包管理器自动安装,如果你想使用那个版本,你需要专门安装它。
在这种情况下,您必须按照 Sklean - Advanced Installation - Install Bleeding Edge 中的说明获取开发版本。