A python package for inducing membership functions from labeled data
Project description
Title
summary
Table of Contents
mulearn
mulearn is a python package implementing the data-driven induction of fuzzy sets described in
- D. Malchiodi and W. Pedrycz, Learning Membership Functions for Fuzzy Sets through Modified Support Vector Clustering, in F. Masulli, G. Pasi e R. Yager (Eds.), Fuzzy Logic and Applications. 10th International Workshop, WILF 2013, Genoa, Italy, November 19–22, 2013. Proceedings., Vol. 8256, Springer International Publishing, Switzerland, Lecture Notes on Artificial Intelligence.
Install
pip install mulearn
How to use
Fill me in please! Don't forget code examples:
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
source = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_df = pd.read_csv(source, header=None)
iris_df.columns=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']
iris_values = iris_df.iloc[:,0:4].values
iris_labels = iris_df.iloc[:,4].values
pca_2d = PCA(n_components=2)
iris_values_2d = pca_2d.fit_transform(iris_values)
def gr_dataset():
for lab, col in zip(('Iris-setosa', 'Iris-versicolor', 'Iris-virginica'),
('blue', 'green', 'red')):
plt.scatter(iris_values_2d[iris_labels==lab, 0],
iris_values_2d[iris_labels==lab, 1],
label=lab,
c=col)
gr_dataset()
def to_membership_values(labels, target):
return [1 if l==target else 0 for l in labels]
mu = {}
for target in ('Iris-setosa', 'Iris-versicolor', 'Iris-virginica'):
mu[target] = to_membership_values(iris_labels, target)
def gr_membership_contour(estimated_membership):
x = np.linspace(-4, 4, 50)
y = np.linspace(-4, 4, 50)
X, Y = np.meshgrid(x, y)
zs = np.array([estimated_membership((x, y))
for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
membership_contour = plt.contour(X, Y, Z,
levels=(.1, .3, .5, .95), colors='k')
plt.clabel(membership_contour, inline=1)
from mulearn import FuzzyInductor
f = FuzzyInductor()
f.fit(iris_values_2d, mu['Iris-virginica'])
gr_dataset()
gr_membership_contour(f.estimated_membership_)
plt.show()
100%|██████████| 100/100 [00:16<00:00, 5.91it/s]
from mulearn import fuzzifier
f = FuzzyInductor(fuzzifier=(fuzzifier.LinearFuzzifier, {}))
f.fit(iris_values_2d, mu['Iris-virginica'])
gr_dataset()
gr_membership_contour(f.estimated_membership_)
plt.show()
100%|██████████| 100/100 [00:19<00:00, 5.16it/s]
f = FuzzyInductor(fuzzifier=(fuzzifier.ExponentialFuzzifier,
{'profile': 'alpha', 'alpha': 0.25}))
f.fit(iris_values_2d, mu['Iris-virginica'])
gr_dataset()
gr_membership_contour(f.estimated_membership_)
plt.show()
100%|██████████| 100/100 [00:20<00:00, 4.98it/s]
from mulearn import kernel
f = FuzzyInductor(k=kernel.GaussianKernel(.3))
f.fit(iris_values_2d, mu['Iris-virginica'])
gr_dataset()
gr_membership_contour(f.estimated_membership_)
plt.show()
100%|██████████| 100/100 [00:20<00:00, 4.83it/s]
from mulearn import optimization as opt
try:
f = FuzzyInductor(solve_strategy=(opt.solve_optimization_gurobi, {}))
f.fit(iris_values_2d, mu['Iris-virginica'])
gr_dataset()
gr_membership_contour(f.estimated_membership_)
plt.show()
except (ModuleNotFoundError, ValueError):
print('Gurobi not available')
Academic license - for non-commercial use only
f = FuzzyInductor(fuzzifier=(fuzzifier.ExponentialFuzzifier,
{'profile': 'alpha', 'alpha': 0.15}),
k=kernel.GaussianKernel(1.5),
solve_strategy=(opt.solve_optimization_tensorflow,
{'n_iter': 20}),
return_profile=True)
f.fit(iris_values_2d, mu['Iris-virginica'])
gr_dataset()
gr_membership_contour(f.estimated_membership_)
plt.show()
100%|██████████| 20/20 [00:04<00:00, 4.83it/s]
plt.plot(f.profile_[0], mu['Iris-virginica'], '.')
plt.plot(f.profile_[1], f.profile_[2])
plt.ylim((-0.1, 1.1))
plt.show()
sigmas = [.225,.5]
parameters = {'c': [1,10,100],
'k': [kernel.GaussianKernel(s) for s in sigmas]}
from sklearn.model_selection import GridSearchCV
from sklearn.exceptions import FitFailedWarning
import logging
import warnings
logging.getLogger('mulearn').setLevel(logging.ERROR)
f = FuzzyInductor()
with warnings.catch_warnings():
warnings.simplefilter('ignore', FitFailedWarning)
virginica = GridSearchCV(f, param_grid=parameters, cv=2)
virginica.fit(iris_values_2d, mu['Iris-virginica'])
100%|██████████| 100/100 [00:08<00:00, 11.99it/s]
100%|██████████| 100/100 [00:08<00:00, 11.36it/s]
100%|██████████| 100/100 [00:09<00:00, 10.92it/s]
100%|██████████| 100/100 [00:09<00:00, 10.67it/s]
100%|██████████| 100/100 [00:10<00:00, 9.70it/s]
100%|██████████| 100/100 [00:10<00:00, 9.83it/s]
100%|██████████| 100/100 [00:10<00:00, 9.81it/s]
100%|██████████| 100/100 [00:10<00:00, 9.95it/s]
100%|██████████| 100/100 [00:10<00:00, 9.41it/s]
100%|██████████| 100/100 [00:10<00:00, 9.19it/s]
100%|██████████| 100/100 [00:10<00:00, 9.23it/s]
100%|██████████| 100/100 [00:10<00:00, 9.42it/s]
100%|██████████| 100/100 [00:18<00:00, 5.42it/s]
gr_dataset()
gr_membership_contour(virginica.best_estimator_.estimated_membership_)
plt.show()
import pickle
saved_estimator = pickle.dumps(virginica.best_estimator_)
loaded_estimator = pickle.loads(saved_estimator)
gr_dataset()
gr_membership_contour(loaded_estimator.estimated_membership_)
plt.show()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
mulearn-0.1.0.tar.gz
(21.9 kB
view hashes)
Built Distribution
mulearn-0.1.0-py3-none-any.whl
(21.5 kB
view hashes)