Accord.NET v3.8.0 Release Notes

Release Date: 2017-10-19 // over 3 years ago
  • ๐Ÿš€ Accord.NET Framework 3.8.0 release notes


    ๐Ÿ”– Version updates and fixes:

    • ๐Ÿ‘ GH-82: Add support for weighted PCA;
    • GH-127: Fast KMeans (Request);
    • GH-145: MovingNormalStatistics;
    • GH-157: Issue in Survival analysis using VB.NET;
    • GH-184: Add an Example for Graylevel coocurrences;
    • GH-211: Any samples on how to use Boosted Decision Trees;
    • GH-257: DFT functions in AForge.Math.FourierTransform and Accord.Math.Transforms;
    • GH-262: C45Learning Discrete vs Real;
    • GH-374: Dictionary of video capabilities doesn't take into account the video framerate;
    • GH-376: Add an Example for VideoCaptureDevice Class;
    • GH-377: Add an Example for LevenbergMarquardt Class;
    • GH-415: Add an Example for AdaBoost(TModel);
    • GH-421: Add an Example for KalmanFilter2D Class;
    • GH-422: Add an Example for DecisionStump.Learn Method;
    • GH-424: Add an Example for AdaBoost(TModel) Class;
    • GH-430: Add an Example for GeneralConfusionMatrix Constructor (Int32, Int32[], Int32[]);
    • ๐Ÿšฆ GH-440: BagOfWords for audio signals;
    • GH-441: Add Mel Frequency Cepstral Coefficients (MFCC);
    • GH-466: Add an Example for Distance.Mahalanobis Method (Double[], Double[]);
    • GH-467: Add an Example for Spline Class;
    • GH-473: Add an Example for IParallel.ParallelOptions Property;
    • GH-476: Add an Example for TwoWayAnova Constructor (Double[][][], TwoWayAnovaModel);
    • GH-483: Add an Example for Haralick Class;
    • GH-486: Add an Example for LibSvmModel.Save Method (String);
    • GH-498: Add an Example for QLearning Class;
    • GH-500: Add an Example for FourierTransform2.FFT Method (Complex[], FourierTransform.Direction);
    • GH-505: Add an Example for ConfusionMatrix Constructor (Int32[], Int32[], Int32, Int32);
    • GH-517: Add an Example for Sarsa Class;
    • GH-519: Add an Example for NelderMead Class;
    • GH-530: Add an Example for Matrix.Inverse Method (Double[][]);
    • GH-532: Add an Example for GaussNewton Class;
    • GH-547: Add an Example for HaralickDescriptor Class;
    • GH-554: Add an Example for BinaryTree(TNode) Class;
    • GH-557: Add an Example for Matrix.Sort(TKey, TValue) Method (TKey[], TValue[,], IComparer(TKey));
    • GH-560: Add an Example for FourierTransform2.FFT Method (Double[], Double[], FourierTransform.Direction);
    • GH-566: Add an Example for Distance.GetDistance(T) Method;
    • GH-569: Add an Example for Distance.Euclidean Method (Double, Double, Double, Double);
    • GH-575: Add an Example for LuDecomposition Class;
    • GH-576: RandomForestLearning: Examples can't run with SampleRatio not equal 1.0;
    • GH-582: Add an Example for Matrix.Multiply Method (Double[], Double[,]);
    • GH-610: Add an Example for UnivariateContinuousDistribution.Fit Method (Double[]);
    • GH-616: Add an Example for LevenbergMarquardt Class;
    • GH-618: Add an Example for Apriori Class;
    • GH-629: Add an Example for AdaBoost(TModel) Class;
    • GH-636: Add an Example for Measures.Correlation Method (Double[][]);
    • GH-640: Add an Example for GaussianKernel Class;
    • GH-642: Add an Example for Matrix.PseudoInverse Method (Decimal[,]);
    • GH-653: Add an Example for HistogramsOfOrientedGradients Class;
    • GH-656: Add an Example for MatReader.Read Method (String);
    • GH-660: Add an Example for LogLikelihoodLoss Class;
    • GH-665: Add an Example for FourierTransform.FFT Method;
    • โœ… GH-687: Add an Example for ShapiroWilkTest Class;
    • GH-695: Add an Example for TFIDF.Transform Method (String[][]);
    • GH-703: Add an Example for Imputation Class;
    • GH-717: Possible issue with DynamicTimeWarp kernel class;
    • GH-718: Add an Example for Cosine.Distance Method;
    • GH-723: Procrustes analysis is giving weird/wrong results;
    • GH-727: Add an Example for IRadialBasisKernel Interface;
    • GH-730: Binary-Split with normalized FREAK;
    • GH-739: Add an Example for MultipleLinearRegression.CoefficientOfDetermination Method;
    • GH-756: Add an Example for ProportionalHazardsAnalysis.LogLikelihood Property;
    • โœ… GH-764: Add an Example for AndersonDarlingTest Class;
    • GH-769: Issue using visual bag of words with large images;
    • GH-783: Add an Example for LocalBinaryPattern Class;
    • GH-785: Add an Example for Tools.RandomGroups Method (Int32, Double);
    • GH-787: Add an Example for HiddenMarkovModel(TDistribution, TObservation).Predict Method (TObservation[]);
    • ๐Ÿ‘ GH-789: Add support for OS X;
    • โœ… GH-792: Add an Example for FisherExactTest Class;
    • GH-793: Add an Example for HoughLineTransformation Class;
    • GH-798: System.AccessViolationException in FastBoxBlur;
    • GH-800: Missing dependency for Accord.Neuro in NuGet;
    • GH-802: Index outside of the bounds of the array in Naive Bayes;
    • GH-803: NaN probabilities from large features with MultinomialLogisticRegression;
    • GH-805: Unsafe keyword being exposed in the public API;
    • GH-807: Add an Example for CrossValidating NaiveBayes;
    • 0๏ธโƒฃ GH-809: The Codification filter should honor the value of DefaultMissingValueReplacement unless overriden;
    • ๐Ÿ‘ GH-811: Naive Bayes should provide better argument checking for negative symbols;
    • GH-812: ZhangSuenSkeletonization filter not exist to use;
    • ๐Ÿ‘ GH-814: Add an Example for MulticlassSupportVectorMachine(TKernel, TInput) Class;
    • GH-818: Add an Example for LinearConstraint Class;
    • ๐Ÿ‘ GH-819: Quadratic Objective Function to support basic vector operations;
    • ๐Ÿ‘ GH-820: Augmented Lagrangian to support linear constraints;
    • GH-824: Improve number of class inference in ZeroOneLoss;
    • GH-825: Replace multi-dimentional with jagged arrays in IntegralImage.cs;
    • GH-828: Accord.Neuro under .Net Standard 2.0;
    • GH-830: Read PGM image pending;
    • GH-831: Index outside of the bounds of the array in Naive Bayes;
    • GH-843: Where is Accord.NET AdaBoost Decide method;
    • GH-845: Add an Example for Decision Structure;
    • โœ… GH-848: Wilcoxon Signed Rank Test for PAIRED samples: TwoSampleWilcoxonSignedRankTest;
    • โœ… GH-849: TwoSampleWilcoxonSignedRankTest crashing when sample vectors are exactly the same values;
    • GH-852: Add an Example for DecisionSet Class;
    • GH-853: Access to last Hessian in BoundedBroydenFletcherGoldfarbShanno;
    • GH-856: Add an overload to IsSymmetric that accepts a tolerance;
    • โœ… GH-857: Mann-Whitney-U Test producing strange results;
    • GH-862: Accord.Math -> Vector -> T[] Sample(T[] values, int size) incorrect;
    • GH-865: Measures.Quartiles: value for Q1 (lower quartile) wrong in QuantileMethod.R;
    • GH-873: Add an Example for DecisionRule Class;
    • GH-876: Allow the maximum frame rate possible in DirectShow for VideoCaptureDevice;
    • GH-877: Add an Example for HaarCascadeWriter Class;
    • GH-878: Accord.Math.Transforms.FourierTransform2.DFT2 Is bugged;
    • GH-882: Adding lazy evaluation to matrix decompositions;
    • ๐Ÿšฆ GH-885: Add an Example for Signal.GetEnergy Method;
    • GH-890: Add an Example for MultinomialLogisticRegressionAnalysis Class;
    • GH-897: Wrong status text in ImageView from DebugVisualizer;
    • GH-898: The Range method is producing some unexpected results;
    • GH-899: Add an Example for IntegralImage2 Class;
    • GH-900: Add an Example for ExhaustiveTemplateMatching Class;
    • GH-901: Add an Example for HSL Class;
    • GH-911: Character case of folder name;
    • GH-913: KNearestNeighbors can not be serialized;
    • GH-917: Two C++ projects require "Platform toolset v141" which is only available on VS2017;
    • ๐Ÿ— GH-919: Build failed for Samples.sln on VS 2015;
    • ๐Ÿ‘€ GH-921: Fix for the normal random number generator when a seed is specified;
    • ๐Ÿ‘€ GH-924, GH-925: Fixing the seeded exponential generator;
    • ๐Ÿ‘€ GH-927: Broadcasting dimension seems counter-intuitive;
    • GH-929: Add an Example for SpeededUpRobustFeaturesDescriptor Class;
    • GH-930: Add an Example for FastCornersDetector Class;
    • GH-931: Add an Example for MatchingTracker Class;
    • GH-937: Add an Example for LogisticRegression Class;
    • GH-948: Accord.Video.FFMPEG.VideoFileReader should provide frame-based random access;
    • ๐Ÿ†“ GH-949: Add the Free Spoken Digits Dataset to Accord.DataSets;
    • โœ… GH-950: Add a dataset for example test videos;
    • GH-955: KalmanFilter2D throws System.NullReferenceException;
    • ๐Ÿ›  GH-956: Integrate AForge.NET fixes (up to September 6);


    • The libsonly script is now in RAR4 format instead of RAR5 so they
      ๐ŸŽ will not be listed as corrupted files by Linux/MacOSX decompressors;


    - Splitting ITransform into ITransform and ICovariantTransform (to support generic covariance);


    • Standardizing the C++ projects to depend on VS2015 runtime instead of VS2017 to keep compatibility with VS2015;

    - Adding a static constructor in the FFMPEG project to check whether the system has those dependencies installed;


    • Adding the initial version for a MelFrequencyCepstrumCoefficients audio feature extractor;
    • Adding a IAudioFeatureExtractor interface (akin to the IImageFeatureExtractor for Accord.Imaging);
    • Adding a Mono filter to convert multi-channel audio signals into single channel (mono) signals;
    • Adding a Signal.FromFile() method to load audio signals from file similarly to Bitmap.FromFile();

    - Adding an AudioDecoder class akin to ImageDecoder to find audio format decoders based on file extension;


    - Adding BagOfAudioWords class to compute bag-of-word representations from audio signals;


    • Adding support for decoding PNM files in format P2 and P3 (besides the already supported P5 and P6);
    • Updating Haralick's to use the same normalization method as HOG and LBP;
    • Updating the color classes (RGB, HSL, YCbCr) to be structs;
    • Adding conversion operators between different color classes;
    • Updating ImageDecoder to find decoders using reflection instead of manual registration;
    • Updating the feature extraction framelet to implement the ITransform interfaces and deprecating IFeatureDetector;
    • Updating all feature descriptors to be classes rather than structs so the generics covariance can work;
    • Integrating AForge.NET's texture generation classes: Adding a base class for texture
      โšก๏ธ generation methods, updating them to use the framework-wide random number generator,
      ๐Ÿ—„ and deprecating their Reset method;


    • Adding the Yin-Yang dataset as an example of a non-linear 2D binary classification problem;

    - Adding the Servo dataset as an example of a mixed discrete/continuous dataset for regression;


    • Adding a methods for the numerical calculation of the Hessian in the FiniteDifferences class;
    • Updating Vector.Interval and Vector.Range to behave similar to NumPy's linspance and arange functions;
    • Adding new overloads in element-wise operations that accept a VectorType enumeration instead
      of a integer for specifying to which dimension the element-wise operation should be performed;

    - Updating the Digamma and Trigamma functions to handle negative values;


    • Updating the AdaBoost classes to implement the more recent classification framelet;
    • Adding a Error property in ConfusionMatrix and GeneralConfusionMatrix (1.0 - Accuracy);
    • Adding named constructors to ConfusionMatrix to create matrices
      directly from classifiers, their inputs and expected outputs;
    • Adding a new IsColor8bpp extension method to detect whether an 8-bpp image is a color image (non-grayscale);
    • Adding a new ConvertColor8bppToGrayscale8bpp extension methods to convert these into grayscale 8-bpp images;
    • Fixing Codification filter transformation for DataTables when only some columns should be converted;
    • NumberOfOutputs and NumberOfSymbols should have different implementations depending on the variable type;
    • Enforcing alphabetical/default sorted order for symbols in Codification filter (this is a breaking change);

    - Codification filter should now transform columns in the same order as specified by the user;


    - Adding exponentially weighted moving average (ewma) methods in Statistics.Measures partial classes;

    Sample applications

    • Adding a new sample application demonstrating how to use the framework in Unity 3D.

    Download Accord.NET Framework

Previous changes from v3.7.0

  • ๐Ÿš€ Accord.NET Framework 3.7.0 release notes


    ๐Ÿ”– Version updates and fixes:

    • GH-53: K-Medoids algorithm;
    • GH-335: Nelder-mead solver not converged;
    • โœ… GH-444: Reenable F# Unit Tests;
    • ๐Ÿ‘ GH-587: UnmanagedImage does not supported in ExtractBiggestBlob filter;
    • GH-594: FFMPEG net35 not working;
    • GH-621: How to calculate the cache size in respect of the available RAM;
    • GH-662: 64-bit FFMPEG binaries not in output after installing with NuGet;
    • GH-669: Confusion Matrix;
    • GH-673: Stream closes after serialization with GZip compression;
    • GH-676: DoubleArrayChromosome CreateNew ignores Balancer properties;
    • GH-684: BalancedKMeans gets stuck;
    • GH-688: Cobyla constraint definitions only work with constant values;
    • GH-690: Add an Example for Cross-Validation with DecisionTrees;
    • GH-692: Add an Example for StochasticGradientDescent Class;
    • GH-693: One-class SVM decision rule;
    • ๐Ÿ‘ GH-694: Add support for Weighted Least Squares;
    • ๐Ÿ‘ป GH-696: IndexOutOfRangeException exception in Matrix.First method;
    • GH-697: Add an Example for HiddenMarkovModel(TDistribution, TObservation);
    • GH-699: MJPEGStream throws NotImplementedException in .NET Core 2.0;
    • GH-700: MJPEGStream throws InvalidOperationException in .NET Core 2.0;
    • GH-706: DecisionTree.ToCode() returns code that does not compile;
    • GH-707: DecisionTree.ToCode() returns code that compiles;
    • GH-711: Nonlinear Regression in VB.NET;
    • โšก๏ธ GH-712: Update MJPEGStream.cs ;
    • GH-715: GeneralizedParetoDistribution shape param;
    • GH-717: Possible issue with DynamicTimeWarping kernel class;
    • GH-723: Procrustes analysis is giving weird/wrong results;
    • GH-729: Error in ExhaustiveBlockMatching;
    • GH-731: Dilatation;
    • GH-736: Measures.Quartiles() for double Vectors of size 2 is wrong;
    • GH-737: Add examples for C45Learning Class with missing data and thresholds;
    • 0๏ธโƒฃ GH-745: Cannot change degree of a default Polynomial kernel;
    • GH-746: Add an Example for CrossValidation Class;
    • GH-747: How to understand the Probabilities;
    • ๐Ÿš€ GH-749: 64 bit release for .NET 4.0;
    • GH-752: Speed up matrix-vector operations;
    • GH-758: NullReferenceException on NaiveBayes Learn;
    • GH-765: NaiveBayes 'System.IndexOutOfRangeException' occurred in Accord.Statistics.dll when calling from sample application;
    • GH-767: DebugVisualizers;
    • ๐Ÿ“š GH-777: Bug in LinearConstraintCollection documentation;
    • GH-778: Setter for bounds in BoundedBroydenFletcherGoldfarbShanno.


    • Adding support for targetting NET Standard 1.4;

    - Adding Newtonsoft.Json (Json.NET) in externals.


    • Adding Wisconsin's Breast Cancer (original, prognostic and diagnostic) datasets;
    • Adding Oxford's Parkinsons dataset;


    - Fixing multiple typos regarding the spelling of "Dilation" (this is a breaking change).


    - Adding a ReadLine method to CsvReader to read individual lines from the CSV file.


    • Adding K-Medoids (PAM) and Voronoi Iteration clustering algorithms;
    • Fixing epsilon in Sequential Minimal Optimization for Regression;
    • Adding a MiniBatch static class that can be used to create mini-batch definitions from training data;
    • Update LevenbergMarquardtLearning.cs to allow for different activation functions;
    • Update BackPropagationLearning.cs to allow for different activation functions;
    • Adding support for missing values in C4.5;
    • Updating GeneralConfusionMatrix to represent columns as ground-truth instead of predictions;
    • Improving memory usage for Second Order (LibSVM) Sequential Minimal Optimization;
    • Adding more overloads to the method that helps determine how many lines can
      be included in the SVM kernel cache given a total amount of memory;
    • Fixing ToMulticlass() methods included in multi-label and binary classifiers;
    • Fixing the Probabilities and LogLikelihoods methods for multi-label and multi-class SVMs;
    • Adding an option for OneVsOneLearning/Multiclass SVMs stop at the first exception
      found during training instead of waiting until the all machines have been trained;

    - Adding Precision, Recall, RowErrors and ColumnErrors to GeneralConfusionMatrix.


    • Adding support for .Learn() methods in NonlinearLeastSquares;
    • Updates GH-762: DotAndDot performance for small problem sizes;
    • Removing the deprecated extension methods for Accord.Math.Matrix.Multiply
      (such that calls should now be redirected to Elementwise.Multiply);
    • Fix BinarySearch so that it works with decreasing functions;
    • Search interval in BinarySearch was meant to be [a;b) (i.e. with inclusive a and exclusive b);
    • Fixing the behavior of Matrix.Get() method when negative indices are passed;

    - Fixing Matrix's ToTable method to use the most high level type possible when creating columns.


    • Adding multiple methods for computing quartiles/quantiles;
    • Adding a more advanced version of the discretization filter;

    - Adding an example for fraud detection using HMMs with MaximumLikelihoodLearning class.


    • Adding support for networks with multiple activation functions in Levenberg-Marquardt.