fylearn is a fuzzy machine learning library, built on top of SciKit-Learn.
SciKit-Learn contains many common machine learning algorithms, and is a good place to start if you want to play or program anything related to machine learning in Python. fylearn is not intended to be a replacement for SciKit-Learn (in fact fylearn depends on SciKit-Learn), but to provide an extra set of machine learning algorithms from the fuzzy logic community.
Fuzzy pattern classifiers are classifiers that describe data using fuzzy sets and fuzzy aggregation functions.
Several fuzzy pattern classifiers are implemented in the library:
A type of classifier that uses GA to optimize rules
You can add fylearn to your project by using pip:
pip install fylearn
You can use the classifiers as any other SciKit-Learn classifier:
from fylearn.nfpc import FuzzyPatternClassifier from fylearn.garules import MultimodalEvolutionaryClassifier from fylearn.fpt import FuzzyPatternTreeTopDownClassifier C = (FuzzyPatternClassifier(), MultimodalEvolutionaryClassifier(), FuzzyPatternTreeTopDownClassifier()) for c in C: print c.fit(X, y).predict([1, 2, 3, 4])
Several heuristic search methods are implemented. These are used in the learning algorithms for parameter assignment, but, are also usable directly.
import numpy as np from fylearn.ga import UnitIntervalGeneticAlgorithm, helper_fitness, helper_n_generations from fylearn.local_search import LocalUnimodalSamplingOptimizer, helper_num_runs from fylearn.tlbo import TeachingLearningBasedOptimizer from fylearn.jaya import JayaOptimizer def fitness(x): # defined for a single chromosome, so we need helper_fitness for GA return np.sum(x**2) ga = UnitIntervalGeneticAlgorithm(fitness_function=helper_fitness(fitness), n_chromosomes=100, n_genes=10) ga = helper_n_generations(ga, 100) best_chromosomes, best_fitness = ga.best(1) print "GA solution", best_chromosomes, "fitness", best_fitness lower_bounds, upper_bounds = np.ones(10) * -10., np.ones(10) * 10. lus = LocalUnimodalSamplingOptimizer(fitness, lower_bounds, upper_bounds) best_solution, best_fitness = helper_num_runs(lus, 100) print "LUS solution", best_solution, "fitness", best_fitness tlbo = TeachingLearningBasedOptimizer(fitness, lower_bounds, upper_bounds) tlbo = helper_n_generations(tlbo, 100) best_solution, best_fitness = tlbo.best() print "TLBO solution", best_solution, "fitness", best_fitness jaya = JayaOptimizer(fitness, lower_bounds, upper_bounds) jaya = helper_n_generations(jaya, 100) best_solution, best_fitness = jaya.best() print "Jaya solution", best_solution, "fitness", best_fitness
Tiny, but hopefully useful. The focus of the library is on providing membership functions and aggregations that work with NumPy, for using in the implemented learning algorithms.
import numpy as np from fylearn.fuzzylogic import TriangularSet t = TriangularSet(1.0, 4.0, 5.0) print t(3) # use with singletons print t(np.array([[1, 2, 3], [4, 5, 6]])) # use with arrays
Here focus has been on providing aggregation functions that support aggregation along a specified axis for 2-dimensional matrices.
import numpy as np from fylearn.fuzzylogic import meowa, OWA a = OWA([1.0, 0.0, 0.0]) # pure AND in OWA X = np.random.rand(5, 3) print a(X) # AND row-wise a = meowa(5, 0.2) # OR, andness = 0.2 print a(X.T) # works column-wise, so apply to transposed X
We are working on adding the following algorithms:
fylearn is supposed to mean "FuzzY learning", but in Danish the word "fy" means loosely translated "for shame". It has been created by the Department of Computer Science at Sri Venkateswara University, Tirupati, INDIA by a PhD student as part of his research.