def test_update_n_sensors(data, n_sensors): x, y, l1_penalty = data model = SSPOC(l1_penalty=l1_penalty).fit(x, y, quiet=True) model.update_sensors(n_sensors=n_sensors, quiet=True) assert len(model.selected_sensors) == n_sensors assert model.n_sensors == n_sensors
def test_large_threshold(data): x, y, l1_penalty = data model = SSPOC(l1_penalty=l1_penalty).fit(x, y, quiet=True) model.update_sensors(threshold=10, quiet=True) assert len(model.selected_sensors) == 0 assert model.n_sensors == 0
def test_update_threshold(data): x, y, l1_penalty = data model = SSPOC(threshold=0.01, l1_penalty=l1_penalty).fit(x, y, quiet=True) nnz = len(model.selected_sensors) # Larger threshold should result in fewer sensors model.update_sensors(threshold=1, quiet=True) assert len(model.selected_sensors) < nnz
def test_dummy_predict(data): x, y, l1_penalty = data model = SSPOC(l1_penalty=l1_penalty).fit(x, y, quiet=True) model.update_sensors(n_sensors=0, xy=(x, y), quiet=True) assert model.n_sensors == 0 # Test that model can still make predictions, albeit random ones # when it has no sensors to work with y_pred = model.predict(x) assert len(y_pred) == len(y)
def test_not_fitted(data_binary_classification): x, y, _ = data_binary_classification model = SSPOC() # Shouldn't be able to call any of these methods before fitting with pytest.raises(NotFittedError): model.predict(x) with pytest.raises(NotFittedError): model.update_sensors(n_sensors=5) with pytest.raises(NotFittedError): model.selected_sensors
Gamma = lambda x: np.dot(x, f_gamma) beta = Gamma(X).squeeze() dz = beta > 0 #y = H(x) X_tr, X_te, dz_tr, dz_te = train_test_split(X, dz) model = SSPOC() model.fit(X_tr, dz_tr) plt.figure() plt.plot(np.sort(np.abs(model.sensor_coef_)), 'o') plt.title('Coefficient magnitudes') model.update_sensors(n_sensors=2, xy=(X_tr, dz_tr)) print('Portion of sensors used:', len(model.selected_sensors) / 10) print('Selected sensors:', model.selected_sensors) plt.figure() plt.plot(f_gamma) plt.stem(model.selected_sensors, np.ones_like(model.selected_sensors)) accuracy = metrics.accuracy_score( dz_te, model.predict(X_te[:, model.selected_sensors])) print(accuracy) #%% def plot_sensor_locations(sensors, ax=None): img = np.zeros(64) img[sensors] = 16
def test_bad_update_sensors_input(data_binary_classification): x, y, _ = data_binary_classification model = SSPOC().fit(x, y, quiet=True) with pytest.raises(ValueError): model.update_sensors()