Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions pylearning/ensembles/ensembles.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import logging
import random
import abc
import numpy as np
from operator import itemgetter
from concurrent.futures import ProcessPoolExecutor


from ..trees import DecisionTreeRegressor
from ..trees import DecisionTreeClassifier
from six import add_metaclass


class RandomForest(metaclass=abc.ABCMeta):
@add_metaclass(abc.ABCMeta)
class RandomForest(object):
"""
Abstract base class for random forest algorithms. This class is not meant
to be instanciated, ont its subclasses can be used.
Expand Down
5 changes: 3 additions & 2 deletions pylearning/neighbours/neighbours.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import abc
import numpy as np
from six import add_metaclass


class KNN(metaclass=abc.ABCMeta):
@add_metaclass(abc.ABCMeta)
class KNN(object):
"""
Abstract base class for nearest neighbours algorithms. This class is not
meant to be instanciated, ont its subclasses can be used.
Expand Down
13 changes: 7 additions & 6 deletions pylearning/trees/trees.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import random
import abc
import numpy as np
from math import log2, sqrt
#from math import log2, sqrt
from numbers import Number

from .node import DecisionNode
from six import add_metaclass


class DecisionTree(metaclass=abc.ABCMeta):
@add_metaclass(abc.ABCMeta)
class DecisionTree(object):
"""
Abstract base class for decision trees. This class is not meant to be
instanciated,only its subclasses can be used.
Expand Down Expand Up @@ -68,9 +69,9 @@ def set_number_features_evaluated_split(self, row):
self.max_split_features <= len(row) else len(row)
elif isinstance(self.max_split_features, str):
if self.max_split_features in ['auto','sqrt']:
self.considered_features = int(sqrt(len(row)))
self.considered_features = int(np.sqrt(len(row)))
elif self.max_split_features == 'log2':
self.considered_features = int(log2(len(row)))
self.considered_features = int(np.log2(len(row)))
else:
self.considered_features = len(row)

Expand Down Expand Up @@ -104,7 +105,7 @@ def entropy(self, targets):
ent = 0.0
for val in results.values():
p = float(val) / len(targets)
ent -= p * log2(p)
ent -= p * np.log2(p)
return ent


Expand Down
5 changes: 5 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[bdist_wheel]
universal = 1

[metadata]
license_file = LICENSE.md
4 changes: 3 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
'Intended Audience :: Developers',
'Topic :: Scientific/Engineering :: Artificial Intelligence',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
Expand All @@ -37,5 +38,6 @@

packages=find_packages(exclude=['contrib','docs','tests']),

install_requires=['numpy']
install_requires=['numpy','six','futures;python_version<"3"']

)