In K-fold cross-validation, the aim is to generate K training/validation set pair, where training and validation sets on fold i do no overlap. First, we divide the dataset X into K parts as X1; X2; ... ; XK. Then for each fold i, we use Xi as the validation set and the remaining as the training set.
Possible values of K are 10 or 30. One extreme case of K-fold cross-validation is leave-one-out, where K = N and each validation set has only one instance. If we have more computation power, we can have multiple runs of K-fold cross-validation, such as 10 x 10 cross-validation or 5 x 2 cross-validation.
If we have very small datasets, we do not insist on the non-overlap of training and validation sets. In bootstrapping, we generate K multiple training sets, where each training set contains N examples (like the original dataset). To get N examples, we draw examples with replacement. For the validation set, we use the original dataset. The drawback of bootstrapping is that the bootstrap samples overlap more than the cross-validation sample, hence they are more dependent.
You can also see Python, Java, C++, C, Swift, Js, Php, or C# repository.
To check if you have a compatible version of Python installed, use the following command:
python -V
You can find the latest version of Python here.
Install the latest version of Git.
pip3 install NlpToolkit-Sampling-Cy
In order to work on code, create a fork from GitHub page. Use Git for cloning the code to your local or below line for Ubuntu:
git clone <your-fork-git-link>
A directory called Sampling will be created. Or you can use below link for exploring the code:
git clone https://github.com/starlangsoftware/Sampling-Cy.git
Steps for opening the cloned project:
- Start IDE
- Select File | Open from main menu
- Choose
Sampling-CYfile - Select open as project option
- Couple of seconds, dependencies will be downloaded.
k. eğitim kümesini elde etmek için
getTrainFold(self, k: int) -> list
k. test kümesini elde etmek için
getTestFold(self, k: int) -> list
Bootstrap için BootStrap sınıfı
Bootstrap(self, instanceList: list, seed: int)
Örneğin elimizdeki veriler a adlı ArrayList'te olsun. Bu veriler üstünden bir bootstrap örneklemi tanımlamak için (5 burada rasgelelik getiren seed'i göstermektedir. 5 değiştirilerek farklı samplelar elde edilebilir)
bootstrap = Bootstrap(a, 5)
ardından üretilen sample'ı çekmek için ise
sample = bootstrap.getSample()
yazılır.
K kat çapraz geçerleme için KFoldCrossValidation sınıfı
KFoldCrossValidation(self, instanceList: list, K: int, seed: int)
Örneğin elimizdeki veriler a adlı ArrayList'te olsun. Bu veriler üstünden 10 kat çapraz geçerleme yapmak için (2 burada rasgelelik getiren seed'i göstermektedir. 2 değiştirilerek farklı samplelar elde edilebilir)
kfold = KFoldCrossValidation(a, 10, 2)
ardından yukarıda belirtilen getTrainFold ve getTestFold metodları ile sırasıyla i. eğitim ve test kümeleri elde edilebilir.
Stratified K kat çapraz geçerleme için StratifiedKFoldCrossValidation sınıfı
StratifiedKFoldCrossValidation(self, instanceLists: list, K: int, seed: int)
Örneğin elimizdeki veriler a adlı ArrayList of listte olsun. Stratified bir çapraz geçerlemede sınıflara ait veriler o sınıfın oranında temsil edildikleri için her bir sınıfa ait verilerin ayrı ayrı ArrayList'te olmaları gerekmektedir. Bu veriler üstünden 30 kat çapraz geçerleme yapmak için (4 burada rasgelelik getiren seed'i göstermektedir. 4 değiştirilerek farklı samplelar elde edilebilir)
stratified = StratifiedKFoldCrossValidation(a, 30, 4)
ardından yukarıda belirtilen getTrainFold ve getTestFold metodları ile sırasıyla i. eğitim ve test kümeleri elde edilebilir.
- Do not forget to set package list. All subfolders should be added to the package list.
packages=['Classification', 'Classification.Model', 'Classification.Model.DecisionTree',
'Classification.Model.Ensemble', 'Classification.Model.NeuralNetwork',
'Classification.Model.NonParametric', 'Classification.Model.Parametric',
'Classification.Filter', 'Classification.DataSet', 'Classification.Instance', 'Classification.Attribute',
'Classification.Parameter', 'Classification.Experiment',
'Classification.Performance', 'Classification.InstanceList', 'Classification.DistanceMetric',
'Classification.StatisticalTest', 'Classification.FeatureSelection'],
- Package name should be lowercase and only may include _ character.
name='nlptoolkit_math',
- Do not forget to comment each function.
def __broadcast_shape(self, shape1: Tuple[int, ...], shape2: Tuple[int, ...]) -> Tuple[int, ...]:
"""
Determines the broadcasted shape of two tensors.
:param shape1: Tuple representing the first tensor shape.
:param shape2: Tuple representing the second tensor shape.
:return: Tuple representing the broadcasted shape.
"""
- Function names should follow caml case.
def addItem(self, item: str):
- Local variables should follow snake case.
det = 1.0
copy_of_matrix = copy.deepcopy(self)
- Class variables should be declared in each file.
class Eigenvector(Vector):
eigenvalue: float
- Variable types should be defined for function parameters and class variables.
def getIndex(self, item: str) -> int:
- For abstract methods, use ABC package and declare them with @abstractmethod.
@abstractmethod
def train(self, train_set: list[Tensor]):
pass
- For private methods, use __ as prefix in their names.
def __infer_shape(self, data: Union[List, List[List], List[List[List]]]) -> Tuple[int, ...]:
- For private class variables, use __ as prefix in their names.
class Matrix(object):
__row: int
__col: int
__values: list[list[float]]
- Write __repr__ class methods as toString methods
- Write getter and setter class methods.
def getOptimizer(self) -> Optimizer:
return self.optimizer
def setValue(self, value: Optional[Tensor]) -> None:
self._value = value
- If there are multiple constructors for a class, define them as constructor1, constructor2, ..., then from the original constructor call these methods.
def constructor1(self):
self.__values = []
self.__size = 0
def constructor2(self, values: list):
self.__values = values.copy()
self.__size = len(values)
def __init__(self,
valuesOrSize=None,
initial=None):
if valuesOrSize is None:
self.constructor1()
elif isinstance(valuesOrSize, list):
self.constructor2(valuesOrSize)
- Extend test classes from unittest and use separate unit test methods.
class TensorTest(unittest.TestCase):
def test_inferred_shape(self):
a = Tensor([[1.0, 2.0], [3.0, 4.0]])
self.assertEqual((2, 2), a.getShape())
def test_shape(self):
a = Tensor([1.0, 2.0, 3.0])
self.assertEqual((3, ), a.getShape())
- Enumerated types should be used when necessary as enum classes.
class AttributeType(Enum):
"""
Continuous Attribute
"""
CONTINUOUS = auto()
"""
Discrete Attribute
"""
DISCRETE = auto()
