Random Forest model for the genotoxicity classificaton of MWCNTs.
avatar
Jaqpot Team@jaqpot-team
almost 4 years ago
SKLEARN_ONNX

Random Forest model for the genotoxicity classificaton of MWCNTs.

Training dataset is available in this link


QMRF Report

1. QSAR Identifier

1.1.QSAR identifier (title):

Random Forest model for classifying genotoxicity of multi-walled carbon nanotubes (MWCNTs).

The model has been presented in the pubclication “Machine learning methods for multi-walled carbon
nanotubes (MWCNT) genotoxicity prediction", M. Kotzabasaki, I. Sotiropoulos, C. Charitidis, H. Sarimveis, Nanoscale Adv., 2021, 3(11), 3167-3176, DOI: 10.1039/d0na00600a

1.2.Other related models:

None

1.3.Software coding the model:

Jaqpot is a web platform that support development, validation and sharing of QSAR models apps.jaqpot.org

 
 
 
 


2. General Information

2.1.Date of QMRF:

28 September 2019

2.2.QMRF author(s) and contact details:

Iason Sotiropoulos, National Technical University of Athens, jasonsoti1@gmail.com

Marianna Kotzabasaki, National Technical University of Athens, mariannako@chemeng.ntua.gr

2.3.Date of QMRF update(s):

28 September 2019

2.4.QMRF update(s):

2.5.Model developer(s) and contact details:

[1] Iason Sotiropoulos, National Technical University of Athens, jasonsoti1@gmail.com

[2] Marianna Kotzabasaki, National Technical University of Athens, mariannako@chemeng.ntua.gr

2.6.Date of model development and/or publication:

The model was developed on 11/04/2020.

2.7.Reference(s) to main scientific papers and/or software package:

2.8.Availability of information about the model:

2.9.Availability of another QMRF for exactly the same model:

 
 
 
 


3. Defining the endpoint - OECD Principle 1

3.1.Species:

3.2.Endpoint:

Genotoxicity of MWCNTs.

3.3.Comment on endpoint:

The endpoint is classified in two classes, class 0 and 1, where each class corresponds into genotoxic and non-genotoxic MWCNTs respectivelly.

3.4.Endpoint units:

Dimensionless endpoint.

3.5.Dependent variable:

Genotoxicity of MWCNTs.

3.6.Experimental protocol:

3.7.Endpoint data quality and variability:

 
 
 
 


4. Defining the algorithm - OECD Principle 2

4.1.Type of model:

Logistic Regression (LR)

4.2.Explicit algorithm:

Logistic Regression (C=1374.54, penalty='l1',random_state=42)

4.3.Descriptors in the model:

[1] Purity - Percentage of carbon purity in the MWCNT (Continuous)
[2] Zeta average - Hydrodynamic size of MWCNTs measured in DLS at a dose of 12.5 μg/ml (Continuous)
[3]Length - The length of the MWCNTs(Continuous)

4.4.Descriptor selection:

4.5.Algorithm and descriptor generation:

4.6.Software name and version for descriptor generation:

4.7.Chemicals/Descriptors ratio:

 
 
 
 


5. Defining the algorithm - OECD Principle 3

5.1.Description of the applicability domain of the model:

5.2.Method used to assess the applicability domain: Leverage method

5.3.Software name and version for applicability domain assessment:

5.4.Limits of applicability:

Leverage Threshold value = 1.2
 
 
 
 


6. Internal Validation - OECD Principle 3

6.1.Availability of the training set:

Yes

6.2.Available information for the training set:

CAS RN: No

Chemical Name: Yes

Smiles: No

Formula: No

INChI: No

MOL file: No

NanoMaterial: No

6.3.Data for each descriptor variable for the training set:

All

6.4.Data for the dependent variable for the training set:

All

6.5.Other information about the training set:

6.6.Pre-processing of data before modelling:

The data are scaled in the range [0,1]

6.7.Statistics for goodness-of-fit:

Train Accuracy: 1.0
Train F1-Score: 1.0
Train MCC: 1.0

6.8.Robustness - Statistics obtained by 3-fold cross-validation:

6.9.Robustness - Statistics obtained by leave-many-out cross-validation:

Accuracy scores for 4-fold cross validation: [0.75, 0.75, 1.0, 0.67]
Cross Validation Mean Score: 0.792

6.10.Robustness - Statistics obtained by Y-scrambling:

6.11.Robustness - Statistics obtained by bootstrap:

6.12.Robustness - Statistics obtained by other methods:

 
 
 
 


7. External Validation - OECD Principle 4

7.1.Availability of the external validation set:

Yes

7.2.Available information for the external validation set:

CAS RN: No

Chemical Name: Yes

Smiles: No

Formula: No

INChI: No

MOL file: No

NanoMaterial: No

7.3.Data for each descriptor variable for the external validation set:

All

7.4.Data for the dependent variable for the external validation set:

All

7.5.Other information about the external validation set:

The extrernal validation test set consists of 33% (5 out of 15 samples) of the original data selected by the Kennard-Stone algorithm.

7.6.Experimental design of test set:

By setting aside 33% of the original pool of samples according to the Kennard-Stone algorithm.

7.7.Predictivity - Statistics obtained by external validation:

7.8.Predictivity - Assessment of the external validation set:

7.9.Comments on the external validation of the model:

 
 
 
 


8. Providing a mechanistic Interpetation - OECD Principle 5

8.1.Mechanistic basis of the model:

8.2.A priori or a posteriori mechanistic interpretation:

8.3.Other information about the mechanistic interpretation:

 
 
 
 


9. Miscellaneous information

9.1.Comments:

9.2.Bibliography:

9.3.Supporting information:

Training set(s)

Training dataset is available in this link
(https://app.jaqpot.org/dataset/wZD0GObM42fPMQAOXUwH7Z)

Test set(s)Supporting information

 
 
 
 


Model in PMML Format

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PMML xmlns="http://www.dmg.org/PMML-4_4" xmlns:data="http://jpmml.org/jpmml-model/InlineTable" version="4.4">
	<Header>
		<Application name="JPMML-SkLearn" version="1.6.7"/>
		<Timestamp>2021-01-13T12:52:54Z</Timestamp>
	</Header>
	<MiningBuildTask>
		<Extension>PMMLPipeline(steps=[('scale', MinMaxScaler()),
       ('classifier', RandomForestClassifier(max_features=0.6664580622368363,
                       min_samples_split=0.11646759543664197, n_estimators=19,
                       random_state=42))])</Extension>
	</MiningBuildTask>
	<DataDictionary>
		<DataField name="Genotoxicity" optype="categorical" dataType="integer">
			<Value value="0"/>
			<Value value="1"/>
		</DataField>
		<DataField name="Length ave. (nm) " optype="continuous" dataType="double"/>
		<DataField name="Purity (%)" optype="continuous" dataType="double"/>
		<DataField name="Zave (12.5 ug/ml)" optype="continuous" dataType="double"/>
	</DataDictionary>
	<TransformationDictionary/>
	<MiningModel functionName="classification">
		<MiningSchema>
			<MiningField name="Genotoxicity" usageType="target"/>
			<MiningField name="Length ave. (nm) "/>
			<MiningField name="Purity (%)"/>
			<MiningField name="Zave (12.5 ug/ml)"/>
		</MiningSchema>
		<Output>
			<OutputField name="probability(0)" optype="continuous" dataType="double" feature="probability" value="0"/>
			<OutputField name="probability(1)" optype="continuous" dataType="double" feature="probability" value="1"/>
		</Output>
		<LocalTransformations>
			<DerivedField name="minMaxScaler(Length ave. (nm) )" optype="continuous" dataType="double">
				<Apply function="+">
					<Apply function="*">
						<FieldRef field="Length ave. (nm) "/>
						<Constant dataType="double">1.930092065391519E-4</Constant>
					</Apply>
					<Constant dataType="double">-0.10015247727316591</Constant>
				</Apply>
			</DerivedField>
			<DerivedField name="minMaxScaler(Purity (%))" optype="continuous" dataType="double">
				<Apply function="+">
					<Apply function="*">
						<FieldRef field="Purity (%)"/>
						<Constant dataType="double">0.10869565217391301</Constant>
					</Apply>
					<Constant dataType="double">-9.78260869565217</Constant>
				</Apply>
			</DerivedField>
			<DerivedField name="minMaxScaler(Zave (12.5 ug/ml))" optype="continuous" dataType="double">
				<Apply function="+">
					<Apply function="*">
						<FieldRef field="Zave (12.5 ug/ml)"/>
						<Constant dataType="double">0.001455604075691412</Constant>
					</Apply>
					<Constant dataType="double">-0.21106259097525473</Constant>
				</Apply>
			</DerivedField>
			<DerivedField name="float(minMaxScaler(Length ave. (nm) ))" optype="continuous" dataType="float">
				<FieldRef field="minMaxScaler(Length ave. (nm) )"/>
			</DerivedField>
			<DerivedField name="float(minMaxScaler(Purity (%)))" optype="continuous" dataType="float">
				<FieldRef field="minMaxScaler(Purity (%))"/>
			</DerivedField>
			<DerivedField name="float(minMaxScaler(Zave (12.5 ug/ml)))" optype="continuous" dataType="float">
				<FieldRef field="minMaxScaler(Zave (12.5 ug/ml))"/>
			</DerivedField>
			<DerivedField name="double(float(minMaxScaler(Length ave. (nm) )))" optype="continuous" dataType="double">
				<FieldRef field="float(minMaxScaler(Length ave. (nm) ))"/>
			</DerivedField>
			<DerivedField name="double(float(minMaxScaler(Purity (%))))" optype="continuous" dataType="double">
				<FieldRef field="float(minMaxScaler(Purity (%)))"/>
			</DerivedField>
			<DerivedField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))" optype="continuous" dataType="double">
				<FieldRef field="float(minMaxScaler(Zave (12.5 ug/ml)))"/>
			</DerivedField>
		</LocalTransformations>
		<Segmentation multipleModelMethod="average">
			<Segment id="1">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="7">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.05602092295885086"/>
							<ScoreDistribution value="0" recordCount="7"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="5">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.6396739184856415"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="5"/>
						</Node>
						<Node score="0" recordCount="3">
							<True/>
							<ScoreDistribution value="0" recordCount="3"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="2">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="11">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.1659388691186905"/>
							<ScoreDistribution value="0" recordCount="11"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="4">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="4"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="3">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="1" recordCount="4">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.8097826242446899"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="4"/>
						</Node>
						<Node>
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.967391312122345"/>
							<Node>
								<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.9402174055576324"/>
								<Node score="0" recordCount="1">
									<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.07827488332986832"/>
									<ScoreDistribution value="0" recordCount="1"/>
									<ScoreDistribution value="1" recordCount="0"/>
								</Node>
								<Node score="1" recordCount="1">
									<True/>
									<ScoreDistribution value="0" recordCount="0"/>
									<ScoreDistribution value="1" recordCount="1"/>
								</Node>
							</Node>
							<Node score="0" recordCount="6">
								<True/>
								<ScoreDistribution value="0" recordCount="6"/>
								<ScoreDistribution value="1" recordCount="0"/>
							</Node>
						</Node>
						<Node score="0" recordCount="1">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.5072780204936862"/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="2">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="2"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="4">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="8">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.1659388691186905"/>
							<ScoreDistribution value="0" recordCount="8"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="5">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.9402174055576324"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="5"/>
						</Node>
						<Node score="0" recordCount="2">
							<True/>
							<ScoreDistribution value="0" recordCount="2"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="5">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node>
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.8296943306922913"/>
							<Node score="1" recordCount="2">
								<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.46195653080940247"/>
								<ScoreDistribution value="0" recordCount="0"/>
								<ScoreDistribution value="1" recordCount="2"/>
							</Node>
							<Node score="0" recordCount="11">
								<True/>
								<ScoreDistribution value="0" recordCount="11"/>
								<ScoreDistribution value="1" recordCount="0"/>
							</Node>
						</Node>
						<Node score="1" recordCount="2">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="2"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="6">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="1" recordCount="4">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.8043478429317474"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="4"/>
						</Node>
						<Node score="0" recordCount="11">
							<True/>
							<ScoreDistribution value="0" recordCount="11"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="7">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="1" recordCount="8">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.8043478429317474"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="8"/>
						</Node>
						<Node score="0" recordCount="7">
							<True/>
							<ScoreDistribution value="0" recordCount="7"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="8">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="6">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.05602092295885086"/>
							<ScoreDistribution value="0" recordCount="6"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node>
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.988586962223053"/>
							<Node score="0" recordCount="1">
								<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.0989810791797936"/>
								<ScoreDistribution value="0" recordCount="1"/>
								<ScoreDistribution value="1" recordCount="0"/>
							</Node>
							<Node score="1" recordCount="6">
								<True/>
								<ScoreDistribution value="0" recordCount="0"/>
								<ScoreDistribution value="1" recordCount="6"/>
							</Node>
						</Node>
						<Node score="0" recordCount="2">
							<True/>
							<ScoreDistribution value="0" recordCount="2"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="9">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="4">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.10116448532789946"/>
							<ScoreDistribution value="0" recordCount="4"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="10">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.9402174055576324"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="10"/>
						</Node>
						<Node score="0" recordCount="1">
							<True/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="10">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="4">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.05214143730700016"/>
							<ScoreDistribution value="0" recordCount="4"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="5">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.6396739184856415"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="5"/>
						</Node>
						<Node score="0" recordCount="4">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.6047171428799629"/>
							<ScoreDistribution value="0" recordCount="4"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="2">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="2"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="11">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="8">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.10263264551758766"/>
							<ScoreDistribution value="0" recordCount="8"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="0" recordCount="1">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.2176128146238625"/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="5">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.4229024574160576"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="5"/>
						</Node>
						<Node score="0" recordCount="1">
							<True/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="12">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="8">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.1659388691186905"/>
							<ScoreDistribution value="0" recordCount="8"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="5">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.9402174055576324"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="5"/>
						</Node>
						<Node score="0" recordCount="1">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.5191368628293276"/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="1">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="1"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="13">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="4">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.16011644899845123"/>
							<ScoreDistribution value="0" recordCount="4"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="0" recordCount="1">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.0508000236004591"/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="8">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.44036979228258133"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="8"/>
						</Node>
						<Node score="1" recordCount="1">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.988586962223053"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="1"/>
						</Node>
						<Node score="0" recordCount="1">
							<True/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="14">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="6">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.21106259524822235"/>
							<ScoreDistribution value="0" recordCount="6"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="0" recordCount="1">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.0974117461591959"/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="8">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="8"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="15">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="1" recordCount="4">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.623369574546814"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="4"/>
						</Node>
						<Node score="0" recordCount="6">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.967391312122345"/>
							<ScoreDistribution value="0" recordCount="6"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="0" recordCount="4">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.8405743837356567"/>
							<ScoreDistribution value="0" recordCount="4"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="1">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="1"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="16">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="1" recordCount="2">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.8043478429317474"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="2"/>
						</Node>
						<Node>
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.8296943306922913"/>
							<Node score="0" recordCount="8">
								<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.1251857727766037"/>
								<ScoreDistribution value="0" recordCount="8"/>
								<ScoreDistribution value="1" recordCount="0"/>
							</Node>
							<Node score="0" recordCount="2">
								<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.2176128146238625"/>
								<ScoreDistribution value="0" recordCount="2"/>
								<ScoreDistribution value="1" recordCount="0"/>
							</Node>
							<Node score="1" recordCount="1">
								<True/>
								<ScoreDistribution value="0" recordCount="0"/>
								<ScoreDistribution value="1" recordCount="1"/>
							</Node>
						</Node>
						<Node score="1" recordCount="2">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="2"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="17">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Zave (12.5 ug/ml))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="6">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.05602092295885086"/>
							<ScoreDistribution value="0" recordCount="6"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="0" recordCount="1">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.0989810791797936"/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="5">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.448326051235199"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="5"/>
						</Node>
						<Node score="0" recordCount="1">
							<SimplePredicate field="double(float(minMaxScaler(Zave (12.5 ug/ml))))" operator="lessOrEqual" value="0.6310043632984161"/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="2">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="2"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="18">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Length ave. (nm) )))"/>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="0" recordCount="5">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.1251857727766037"/>
							<ScoreDistribution value="0" recordCount="5"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="6">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.945652186870575"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="6"/>
						</Node>
						<Node score="0" recordCount="2">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.967391312122345"/>
							<ScoreDistribution value="0" recordCount="2"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="0" recordCount="1">
							<SimplePredicate field="double(float(minMaxScaler(Length ave. (nm) )))" operator="lessOrEqual" value="0.8405743837356567"/>
							<ScoreDistribution value="0" recordCount="1"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
						<Node score="1" recordCount="1">
							<True/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="1"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
			<Segment id="19">
				<True/>
				<TreeModel functionName="classification" missingValueStrategy="nullPrediction">
					<MiningSchema>
						<MiningField name="double(float(minMaxScaler(Purity (%))))"/>
					</MiningSchema>
					<Node>
						<True/>
						<Node score="1" recordCount="8">
							<SimplePredicate field="double(float(minMaxScaler(Purity (%))))" operator="lessOrEqual" value="0.9402174055576324"/>
							<ScoreDistribution value="0" recordCount="0"/>
							<ScoreDistribution value="1" recordCount="8"/>
						</Node>
						<Node score="0" recordCount="7">
							<True/>
							<ScoreDistribution value="0" recordCount="7"/>
							<ScoreDistribution value="1" recordCount="0"/>
						</Node>
					</Node>
				</TreeModel>
			</Segment>
		</Segmentation>
	</MiningModel>
</PMML>