Skip to main content

LogisticRegression

Struct LogisticRegression 

Source
pub struct LogisticRegression {
    pub learning_rate: f32,
    pub bias: f32,
    pub weights: Vec<f32>,
    pub l1: f32,
    pub l2: f32,
    pub features: HashMap<Bytes, usize>,
    pub trained: bool,
    pub original_ngrams: u32,
    pub file_type: FileType,
    pub train_performance: PerformanceStats,
    pub test_performance: Option<PerformanceStats>,
    /* private fields */
}
Expand description

Machine learning model using logistic regression

Fields§

§learning_rate: f32

Learning rate

§bias: f32

Bias term

§weights: Vec<f32>

Model’s weights

§l1: f32

L1 LASSO regularization

§l2: f32

L2 Ridge regularization

§features: HashMap<Bytes, usize>

N-grams used to train the model

§trained: bool

If the model has been trained

§original_ngrams: u32

Amount of n-grams originally used

§file_type: FileType

The type of file this model is trained on

§train_performance: PerformanceStats

How well the model performed on the training dataset

§test_performance: Option<PerformanceStats>

How well the model performed on the testing dataset

Implementations§

Source§

impl LogisticRegression

Source

pub fn new(input_size: usize, learning_rate: f32, l1: f32, l2: f32) -> Self

New logistic regression model with random initial weights from given parameters.

Source

pub fn new_from_dataset_and_train( dataset: &mut Dataset, test: Option<&Dataset>, epochs: u32, learning_rate: f32, l1: f32, l2: f32, ) -> (Self, f32)

Returns a trained logistic regression model from given parameters and dataset. Returns the model and the error value from the last epoch.

§Panics

This code won’t panic, but LogisticRegression::train would panic if the data sizes were different, but that can’t happen in this case since the same object is used in both places.

Source

pub fn predict(&self, input: &[f32]) -> f32

Predicts the output for a given input vector. This will fail if the input vector isn’t the same length as the weights vector.

Source

pub fn train( &mut self, epochs: u32, dataset: &mut Dataset, ) -> Result<f32, &'static str>

Trains the classifier once with the given inputs and outputs.

A mutable reference is required because the dataset is shuffled in place each epoch.

§Errors

Returns an error if the data isn’t the correct size or if labels are missing.

Source

pub fn evaluate_dataset<'a>( &self, dataset: &'a Dataset, ) -> Result<ConfusionMatrix<'a>>

Evaluate a dataset

§Errors

If the dataset doesn’t match the model weight length or doesn’t have labels

Source

pub fn evaluate_file<P: AsRef<Path>>( &self, path: P, ) -> Result<(&'static str, f32, u32)>

Evaluate a file

§Errors

Errors will result if the model doesn’t have features or if the sample file can’t be read

Source

pub fn reduce(&mut self, dataset: &Dataset) -> Result<usize>

Remove small weights (from regularization), returns the number of weights removed

§Errors

There’s an error if the model is not trained

Source

pub fn set_features(&mut self, features: Vec<Bytes>) -> Result<()>

Set the features by adding to the struct

§Errors

Returns an error if the number of weights and features doesn’t match

Source

pub fn set_features_and_reduce(&mut self, dataset: &Dataset) -> Result<usize>

Convenience function to get the features from the dataset then reduce based on the dataset.

§Errors

An error occurs if the conditions below aren’t met:

  • Ensures the number of model weights matches the dataset features
  • Ensures the file types match
Source

pub fn with_features(self, features: Vec<Bytes>) -> Result<Self>

Set the features by creating a new struct which has the features

§Errors

Returns an error if the number of weights and features doesn’t match

Trait Implementations§

Source§

impl Clone for LogisticRegression

Source§

fn clone(&self) -> LogisticRegression

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LogisticRegression

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for LogisticRegression

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for LogisticRegression

Source§

fn eq(&self, other: &LogisticRegression) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for LogisticRegression

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for LogisticRegression

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,