With almost a thousand rules for 8 inputs, I guess there are 6 inputs with 2 fuzzy sets, 1 input with 3 fuzzy sets, and another input with 5 fuzzy sets:
numRules = (2^6)*(3^1)*(5^1)
numRules = 960
This effect is called the curse of dimensionality, where the number of rules increases exponentially with the dimension of the input space. If there are 2 fuzzy sets for each of the 8 inputs, the number of Rules in the Grid partitioning-based fuzzy inference system is
numRules = 2^8
numRules = 256
This number is still considered "a lot of Rules" for humans to determine the Rule output level and to assign proper logic manually one-by-one. If the system is designed by an Expert with extensive knowledge on the process, then the most direct way to reduce the number of rules is to cut down the number of non-essential inputs.
If this is data-driven modeling, then the "SubtractiveClustering" and "FCMClustering" methods can be employed to derive the rules from data clusters found using one of the clustering methods.
help genfisOptions
GENFISOPTIONS Creates options for GENFIS function.
GENFISOPTIONS(clusteringType) Creates default option values for the
specified clusteringType to be used by the GENFIS function. You can
specify one of the three clustering types: 'GridPartition',
'SubtractiveClustering' and 'FCMClustering'.
GENFISOPTIONS(clusteringType,name1,value1, ...) Creates options with
the user-provided parameter name/value pairs for the specified
clusteringType.
You can specify the following name/value pairs for 'GridPartition':
'NumMembershipFunctions' is the number of membership functions per
input used in the FIS returned by GENFIS. When provided as a
scalar value, it specifies the same number for all inputs and when
provided as a vector, it specifies separate numbers for each
input. NumMembershipFunctions must be specified using a non-empty
numeric vector of finite integer values greater than 1.
'InputMembershipFunctionType' specifies the types of input
membership functions used in the FIS returned by GENFIS. When
provided a single type, InputMembershipFunctionType specifies the
same type for all inputs and when provided multiple types, it
specifies separate types for each inputs. The default value of
InputMembershipFunctionType is set to 'gbellmf'.
InputMembershipFunctionType must be a character vector or string
scalar when specifying the same type for all inputs and a
character/string array when specifying separate types for each
inputs.
'OutputMembershipFunctionType' specifies the type of output
membership functions used in the FIS returned by GENFIS. The
default value of OutputMembershipFunctionType is set to 'linear'.
OutputMembershipFunctionType must be specified using a non-empty
character row vector or a string scalar having non-empty character
contents. The value of OutputMembershipFunctionType can be either
'linear' or 'constant'.
You can specify the following name/value pairs for
'SubtractiveClustering':
'ClusterInfluenceRange' specifies the range (radius) of influence
of the cluster center for each input and output dimension,
assuming the data falls within a unit hyperbox (range [0 1]).
Specifying a smaller cluster radius will usually yield more,
smaller clusters in the data, and hence more rules. When
ClusterInfluenceRange is a scalar it is applied to all input and
output dimensions. When ClusterInfluenceRange is a vector, it
specifies a separate range of influence for each input and output
dimension. The default value of ClusterInfluenceRange is set to
0.5. ClusterInfluenceRange must be specified using a non-empty
numeric scalar/vector having positive real value(s) less than or
equal to 1.
'DataScale' specifies a matrix used to normalize the input and
output data to be clustered into a unit hyperbox (range [0 1]).
The size of DataScale is 2-by-N, where N is the total number of
inputs and outputs. Each column of DataScale provides the minimum
value in the first row and the maximum value in the second row for
the corresponding input or output data set. The default value of
DataScale is set to empty, which is further updated in GENFIS
using the minimum and maximum data values found in input and
output data. DataScale must be specified 'auto' or a numeric
array having finite real values. The number of rows of InputScal
must be 2.
'SquashFactor' is used to multiply ClusterInfluenceRange values
that determine the neighborhood of a cluster center, so as to
squash the potential for outlying points to be considered as part
of that cluster. The default value of ClusterInfluenceRange is set
to 1.25. SquashFactor must be specified using a non-empty numeric
scalar having a finite positive real value.
'AcceptRatio' sets the potential, as a fraction of the potential
of the first cluster center, above which another data point is
accepted as a cluster center. The default value of AcceptRatio is
set to 0.5. AcceptRatio must be specified using a real value in [0
1].
'RejectRatio' sets the potential, as a fraction of the potential
of the first cluster center, below which a data point is rejected
as a cluster center. The default value of RejectRatio is set to
0.15. RejectRatio must be less than AcceptRatio and specified as a
real value in [0 1].
'Verbose' is a logical flag that specifies if the progress
information is printed as the clustering process proceeds. The
default value of Verbose is set to false. Verbose must be
specified using a logical value true (1) or false (0).
'CustomClusterCenters' specifies the user-supplied cluster
centers. CustomClusterCenters has size J-by-N where J is the
number of clusters and N is the total number of inputs and
outputs. The default value of CustomClusterCenters is set to
empty. CustomClusterCenters must be specified using a 2D numeric
array having finite real values.
You can specify the following name/value pairs for
'FCMClustering':
'FISType' specifies the type of FIS to be retuned by the GENFIS
function. It can take one of two values, 'mamdani' or 'sugeno'.
The default value of FISType is set to 'sugeno'. FISType must be
specified using a character row vector or a string scalar having
non-empty character contents.
'NumClusters' specifies the number of clusters to be generated by
FCM. NumClusters determines the number of rules and membership
functions in the FIS generated by the GENFIS function. The default
value of NumClusters is set to 'auto' in which case GENFIS
function uses SUBCLUST algorithm with a radius of 0.5 to
initialize the number of clusters. NumClusters must be set to
'auto' or a finite positive integer value.
'Exponent' specifies an exponent of a the fuzzy partition matrix,
which controls the amount of fuzzy overlap between clusters, with
larger values indicating a greater degree of overlap. If your data
set is wide with a lot of overlap between potential clusters, then
the calculated cluster centers might be very close to each other.
In this case, each data point has approximately the same degree of
membership in all clusters. To improve your clustering results,
decrease this value, which limits the amount of fuzzy overlap
during clustering. The default value of Exponent is set t0 2.
Exponent must be specified as a nonempty finite real value, which
is greater than 1.
'MaxNumIteration' indicates the maximum number of iterations used
for clustering the user-specified data. The default value of
MaxNumIteration is set to 100. MaxNumIteration must be specified
as a nonempty positive finite integer value.
'MinImprovement' specifies the minimum improvement in an objective
function between two consecutive iterations. The default value of
MinImprovement is set to 1e-5. MinImprovement must be specified as
a nonempty positive finite real value.
'Verbose' indicates a boolean flag whether to display the
objective function value after each iteration, specified as true
(1) or false (0).
Example:
Xin = [rand(10,1) 10*rand(10,1)-5];
Xout = rand(10,1);
options = genfisOptions('GridPartition');
options.NumMembershipFunctions = 5;
fis = genfis(Xin,Xout,options);
See also genfis, subclust, fcm
Documentation for genfisOptions
doc genfisOptions