function Model( N, opts ) {
	var len;

	// Set internal properties:
	this._N = N;
	this._opts = opts;

	this._scaleFactor = 1.0;
	this._t = 0; // iteration counter (i.e., number of updates)

	// Determine the learning rate function:
	this._learningRateMethod = LEARNING_RATE_METHODS[ opts.learningRate[ 0 ] ];

	// Determine the loss function:
	this._lossMethod = LOSS_METHODS[ opts.loss ];

	// Determine the number of model coefficients:
	len = N;
	if ( opts.intercept ) {
		len += 1;
	}
	// Initialize a model weight vector with all weights set to zero:
	this._weights = new Float64Array( len );

	// Initialize model coefficients to zero:
	this._coefficients = new ndarray( 'float64', new Float64Array( len ), [ len ], [ 1 ], 0, 'row-major' );

	return this;
}
Model constructor.

## Notes

-   The model (weight vector) implementation is inspired by the [sofia-ml][sofia-ml] library.

[sofia-ml]: https://code.google.com/archive/p/sofia-ml/

@private
@constructor
@param {PositiveInteger} N - number of feature weights (excluding bias/intercept term)
@param {Options} opts - model options
@param {PositiveNumber} opts.lambda - regularization parameter
@param {ArrayLikeObject} opts.learningRate - learning rate function and associated parameters
@param {string} opts.loss - loss function
@param {boolean} opts.intercept - boolean indicating whether to include an intercept
@returns {Model} model