pypi312 / scikit-learn /Test_ScikitLearn.py
PythonSTB's picture
Upload scikit-learn/Test_ScikitLearn.py with huggingface_hub
988e28a verified
Raw
History Blame Contribute Delete
8.09 kB
"""
On-device verification for the cross-compiled scikit-learn wheel.
Run after installing:
pip install scikit_learn-1.7.1-cp312-cp312-android_24_x86_64.whl
Usage:
python Test_ScikitLearn.py [--quick]
Exit code 0 = everything required PASSed.
Requires: numpy, scipy, joblib, threadpoolctl at runtime.
Generated by RIMI
"""
import sys
RESULTS = []
def test(name, fn):
try:
fn()
RESULTS.append((name, "PASS", None))
except NotImplementedError as exc:
RESULTS.append((name, "SKIP", str(exc)))
except Exception as exc:
RESULTS.append((name, "FAIL", "%s: %s" % (type(exc).__name__, exc)))
print(" ! %s -> %s: %s" % (name, type(exc).__name__, exc))
def section(title):
print("=" * 60)
print(title)
print("=" * 60)
# ---------------------------------------------------------------------------
# 1. import / version
# ---------------------------------------------------------------------------
def import_sklearn():
import sklearn
print(" sklearn", sklearn.__version__)
assert hasattr(sklearn, "__version__")
assert hasattr(sklearn, "show_versions")
def check_c_extension():
import sklearn
# Check that at least one Cython extension loads (tree, metrics, etc.)
from sklearn.tree import _tree
assert hasattr(_tree, "Tree")
# ---------------------------------------------------------------------------
# 2. datasets
# ---------------------------------------------------------------------------
def load_iris():
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
assert X.shape == (150, 4)
assert y.shape == (150,)
def load_digits():
from sklearn.datasets import load_digits
X, y = load_digits(return_X_y=True)
assert X.shape[0] == 1797
# ---------------------------------------------------------------------------
# 3. preprocessing
# ---------------------------------------------------------------------------
def scaler_standard():
from sklearn.preprocessing import StandardScaler
import numpy as np
X = np.array([[1, 2], [3, 4], [5, 6]], dtype=np.float64)
scaler = StandardScaler()
Xt = scaler.fit_transform(X)
assert Xt.shape == X.shape
assert abs(Xt.mean()) < 1e-6
def scaler_minmax():
from sklearn.preprocessing import MinMaxScaler
import numpy as np
X = np.array([[1, 2], [3, 4]], dtype=np.float64)
scaler = MinMaxScaler()
Xt = scaler.fit_transform(X)
assert Xt.min() >= 0 and Xt.max() <= 1
# ---------------------------------------------------------------------------
# 4. decomposition
# ---------------------------------------------------------------------------
def pca_test():
from sklearn.decomposition import PCA
import numpy as np
rng = np.random.default_rng(42)
X = rng.random((50, 10))
pca = PCA(n_components=2)
Xt = pca.fit_transform(X)
assert Xt.shape == (50, 2)
# ---------------------------------------------------------------------------
# 5. cluster
# ---------------------------------------------------------------------------
def kmeans_test():
from sklearn.cluster import KMeans
import numpy as np
rng = np.random.default_rng(42)
X = rng.random((30, 2))
km = KMeans(n_clusters=3, n_init=10, random_state=42)
labels = km.fit_predict(X)
assert labels.shape == (30,)
assert len(set(labels)) == 3
# ---------------------------------------------------------------------------
# 6. linear model
# ---------------------------------------------------------------------------
def logistic_regression():
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
# binary iris (first 100 samples, 2 classes)
Xb, yb = X[:100], y[:100]
clf = LogisticRegression(max_iter=200)
clf.fit(Xb, yb)
pred = clf.predict(Xb[:5])
assert pred.shape == (5,)
def linear_regression():
from sklearn.linear_model import LinearRegression
import numpy as np
X = np.array([[1], [2], [3], [4]], dtype=np.float64)
y = np.array([2, 4, 6, 8], dtype=np.float64)
reg = LinearRegression()
reg.fit(X, y)
pred = reg.predict([[5]])
assert abs(pred[0] - 10) < 1e-3
# ---------------------------------------------------------------------------
# 7. ensemble
# ---------------------------------------------------------------------------
def random_forest():
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
clf = RandomForestClassifier(n_estimators=10, random_state=42)
clf.fit(X[:100], y[:100])
pred = clf.predict(X[:5])
assert pred.shape == (5,)
# ---------------------------------------------------------------------------
# 8. metrics
# ---------------------------------------------------------------------------
def metrics_test():
from sklearn.metrics import accuracy_score, mean_squared_error
import numpy as np
y_true = np.array([0, 1, 1, 0])
y_pred = np.array([0, 1, 0, 0])
acc = accuracy_score(y_true, y_pred)
assert 0 <= acc <= 1
mse = mean_squared_error([1, 2, 3], [1, 2, 3])
assert mse == 0
# ---------------------------------------------------------------------------
# 9. model_selection
# ---------------------------------------------------------------------------
def train_test_split():
from sklearn.model_selection import train_test_split
import numpy as np
X = np.random.rand(20, 4)
y = np.random.randint(0, 2, 20)
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.25, random_state=42)
assert Xtr.shape[0] == 15 and Xte.shape[0] == 5
def cross_val():
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
clf = LogisticRegression(max_iter=200)
scores = cross_val_score(clf, X[:100], y[:100], cv=3)
assert len(scores) == 3
# ---------------------------------------------------------------------------
def main():
quick = "--quick" in sys.argv
section("1. import / version")
test("import sklearn", import_sklearn)
test("C extension _tree", check_c_extension)
section("2. datasets")
test("load_iris", load_iris)
test("load_digits", load_digits)
section("3. preprocessing")
test("StandardScaler", scaler_standard)
test("MinMaxScaler", scaler_minmax)
section("4. decomposition")
test("PCA", pca_test)
section("5. cluster")
test("KMeans", kmeans_test)
section("6. linear_model")
test("LogisticRegression", logistic_regression)
test("LinearRegression", linear_regression)
section("7. ensemble")
test("RandomForest", random_forest)
section("8. metrics")
test("metrics", metrics_test)
section("9. model_selection")
test("train_test_split", train_test_split)
test("cross_val_score", cross_val)
print()
print("=" * 60)
print("SUMMARY")
print("=" * 60)
fails = 0
skips = 0
for name, status, why in RESULTS:
mark = " OK" if status == "PASS" else (" SKIP" if status == "SKIP" else "FAIL")
print("%s %s" % (mark, name))
if why:
print(" -> %s" % why)
if status == "FAIL":
fails += 1
elif status == "SKIP":
skips += 1
print()
passed = len(RESULTS) - fails - skips
print("passed=%d skipped=%d failed=%d" % (passed, skips, fails))
if fails:
print("RESULT: FAILED")
elif skips and not quick:
print("RESULT: PASSED (with informational skips)")
else:
print("RESULT: PASSED")
sys.exit(1 if fails else 0)
if __name__ == "__main__":
main()