Once
/x = preprocessing.scale(df1)/
/
/
is called, the input to your estimator is no longer a dataframe, so
the column transformer can not use strings to select columns.
Thomas
On Friday, May 29, 2020 at 11:46 AM, Chamila Wijayarathna
<cdwijayarat...@gmail.com <mailto:cdwijayarat...@gmail.com>> wrote:
Hi,
Thanks, this solution fixed the issue. However, it introduces a
new error, which was not there before.
Traceback (most recent call last):
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\utils\__init__.py",
line 425, in _get_column_indices
all_columns = X.columns
AttributeError: 'numpy.ndarray' object has no attribute 'columns'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Program Files\JetBrains\PyCharm
2020.1.1\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py",
line 197, in runfile
pydev_imports.execfile(filename, global_vars, local_vars) #
execute the script
File "C:\Program Files\JetBrains\PyCharm
2020.1.1\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py",
line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/ASUS/PycharmProjects/swelltest/enemble.py", line
127, in <module>
ens.fit(x_train,y_train)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\ensemble\_voting.py",
line 265, in fit
return super().fit(X, transformed_y, sample_weight)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\ensemble\_voting.py",
line 81, in fit
for idx, clf in enumerate(clfs) if clf not in (None, 'drop')
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\joblib\parallel.py",
line 1029, in __call__
if self.dispatch_one_batch(iterator):
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\joblib\parallel.py",
line 847, in dispatch_one_batch
self._dispatch(tasks)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\joblib\parallel.py",
line 765, in _dispatch
job = self._backend.apply_async(batch, callback=cb)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\joblib\_parallel_backends.py",
line 206, in apply_async
result = ImmediateResult(func)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\joblib\_parallel_backends.py",
line 570, in __init__
self.results = batch()
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\joblib\parallel.py",
line 253, in __call__
for func, args, kwargs in self.items]
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\joblib\parallel.py",
line 253, in <listcomp>
for func, args, kwargs in self.items]
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\ensemble\_base.py",
line 40, in _fit_single_estimator
estimator.fit(X, y)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\pipeline.py",
line 330, in fit
Xt = self._fit(X, y, **fit_params_steps)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\pipeline.py",
line 296, in _fit
**fit_params_steps[name])
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\joblib\memory.py",
line 352, in __call__
return self.func(*args, **kwargs)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\pipeline.py",
line 740, in _fit_transform_one
res = transformer.fit_transform(X, y, **fit_params)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\compose\_column_transformer.py",
line 529, in fit_transform
self._validate_remainder(X)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\compose\_column_transformer.py",
line 327, in _validate_remainder
cols.extend(_get_column_indices(X, columns))
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\utils\__init__.py",
line 427, in _get_column_indices
raise ValueError("Specifying the columns using strings is only "
ValueError: Specifying the columns using strings is only supported
for pandas DataFrames
Thanks
On Fri, May 29, 2020 at 7:33 PM Thomas J Fan
<thomasjp...@gmail.com <mailto:thomasjp...@gmail.com>> wrote:
VotingClassifer also needs names:
ens = VotingClassifier(estimators=[('pipe1', pipe_phy),
('pipe2', pipe_fa)])
Thomas
On Friday, May 29, 2020 at 2:33 AM, Chamila Wijayarathna
<cdwijayarat...@gmail.com
<mailto:cdwijayarat...@gmail.com>> wrote:
Hi all,
I did manage to get the code to run using a workaround,
which is bit ugly.
Following is the complete stacktrace of the error I was
receiving.
/Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Program Files\JetBrains\PyCharm
2020.1.1\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py",
line 197, in runfile
pydev_imports.execfile(filename, global_vars,
local_vars) # execute the script
File "C:\Program Files\JetBrains\PyCharm
2020.1.1\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py",
line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File
"C:/Users/ASUS/PycharmProjects/swelltest/enemble.py", line
112, in <module>
ens.fit(x_train,y_train)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\ensemble\_voting.py",
line 265, in fit
return super().fit(X, transformed_y, sample_weight)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\ensemble\_voting.py",
line 65, in fit
names, clfs = self._validate_estimators()
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\ensemble\_base.py",
line 228, in _validate_estimators
self._validate_names(names)
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\utils\metaestimators.py",
line 77, in _validate_names
invalid_names = [name for name in names if '__' in name]
File
"C:\Users\ASUS\PycharmProjects\swelltest\venv\lib\site-packages\sklearn\utils\metaestimators.py",
line 77, in <listcomp>
invalid_names = [name for name in names if '__' in name]
TypeError: argument of type 'ColumnTransformer' is not
iterable/
/
/
Following are the inputs in 'names' list at the time of
the error.
1- /ColumnTransformer(transformers=[('phy',
Pipeline(steps=[('imputer',
SimpleImputer(strategy='median')), ('scaler',
StandardScaler())]), ['HR', 'RMSSD', 'SCL'])])
2-
ColumnTransformer(transformers=[('fa',Pipeline(steps=[('imputer',SimpleImputer(strategy='median')),('scaler',
StandardScaler())]),['Squality', 'Sneutral', 'Shappy'])])/
Seems like that the library is attempting to search for
'__' substring of the ColumnTransform object, which it is
unable to perform.
Since this name check doesn't have a signiticant effect on
my functionality, I commented following snippet at
/sklearn\utils\metaestimators.py./
/invalid_names = [name for name in names if '__' in name]
if invalid_names:
raise ValueError('Estimator names must not contain __:
got '
'{0!r}'.format(invalid_names))/
Please let me know if there is a better workaround or that
their are any issues of commenting out this code.
Thanks
On Fri, May 29, 2020 at 10:33 AM Chamila Wijayarathna
<cdwijayarat...@gmail.com
<mailto:cdwijayarat...@gmail.com>> wrote:
Hello all,
I hope I am writing to the correct mailing list about
this issue that I am having. Please apologize me if I
am not.
I am attempting to use a pipeline to feed an ensemble
voting classifier as I want the ensemble learner to
use models that train on different feature sets. For
this purpose, I followed the tutorial available at [1].
Following is the code that I could develop so far.
/y = df1.index
x = preprocessing.scale(df1)
phy_features = ['A', 'B', 'C']
phy_transformer = Pipeline(steps=[('imputer',
SimpleImputer(strategy='median')), ('scaler',
StandardScaler())])
phy_processer =
ColumnTransformer(transformers=[('phy',
phy_transformer, phy_features)])
fa_features = ['D', 'E', 'F']
fa_transformer = Pipeline(steps=[('imputer',
SimpleImputer(strategy='median')), ('scaler',
StandardScaler())])
fa_processer = ColumnTransformer(transformers=[('fa',
fa_transformer, fa_features)])
pipe_phy = Pipeline(steps=[('preprocessor',
phy_processer ),('classifier', SVM)])
pipe_fa = Pipeline(steps=[('preprocessor',
fa_processer ),('classifier', SVM)])
ens = VotingClassifier(estimators=[pipe_phy, pipe_fa])
cv = KFold(n_splits=10, random_state=None, shuffle=True)
for train_index, test_index in cv.split(x):
x_train, x_test = x[train_index], x[test_index]
y_train, y_test = y[train_index], y[test_index]
ens.fit(x_train,y_train)
print(ens.score(x_test, y_test))/
/
/However, when running the code, I am getting an error
saying /TypeError: argument of type
'ColumnTransformer' is not iterable/, at the line
/ens.fit(x_train,y_train)./
What is the reason for this and how can I fix it?
Thank you,
Chamila
--
Chamila Dilshan Wijayarathna,
PhD Research Student
The University of New South Wales (UNSW Canberra)
Australian Centre for Cyber Security
Australian Defence Force Academy
PO Box 7916, Canberra BA ACT 2610
Australia
Mobile:(+61)416895795
_______________________________________________
scikit-learn mailing list
scikit-learn@python.org <mailto:scikit-learn@python.org>
https://mail.python.org/mailman/listinfo/scikit-learn
_______________________________________________
scikit-learn mailing list
scikit-learn@python.org <mailto:scikit-learn@python.org>
https://mail.python.org/mailman/listinfo/scikit-learn
--
Chamila Dilshan Wijayarathna,
PhD Research Student
The University of New South Wales (UNSW Canberra)
Australian Centre for Cyber Security
Australian Defence Force Academy
PO Box 7916, Canberra BA ACT 2610
Australia
Mobile:(+61)416895795
_______________________________________________
scikit-learn mailing list
scikit-learn@python.org
https://mail.python.org/mailman/listinfo/scikit-learn
_______________________________________________
scikit-learn mailing list
scikit-learn@python.org
https://mail.python.org/mailman/listinfo/scikit-learn