def locations(path=None): _, y = get_train_data(path) if len(y) == 0: # pragma: no cover msg = "No location samples available. First learn a location, e.g. with `whereami learn -l kitchen`." print(msg) else: occurrences = Counter(y) for key, value in occurrences.items(): print("{}: {}".format(key, value))
def train_model(): model_file = get_model_file() X, y = get_train_data() # fantastic: because using "quality" rather than "rssi", we expect values 0-150 # 0 essentially indicates no connection # 150 is something like best possible connection # Not observing a wifi will mean a value of 0, which is the perfect default. lp = get_pipeline() lp.fit(X, y) with open(model_file, "wb") as f: pickle.dump(lp, f) return lp
def crossval(clf=None, X=None, y=None, folds=10, n=5): if X is None or y is None: X, y = get_train_data() clf = clf or get_model() tot = 0 print("KFold folds={}, running {} times".format(folds, n)) for i in range(n): res = cross_val_score(clf, X, y, cv=folds).mean() tot += res print("{}/{}: {}".format(i + 1, n, res)) print("-------- total --------") print(tot / n) return tot / n
def train_model(path=None): model_file = get_model_file(path) X, y = get_train_data(path) if len(X) == 0: raise ValueError("No wifi access points have been found during training") # fantastic: because using "quality" rather than "rssi", we expect values 0-150 # 0 essentially indicates no connection # 150 is something like best possible connection # Not observing a wifi will mean a value of 0, which is the perfect default. lp = get_pipeline() lp.fit(X, y) with open(model_file, "wb") as f: pickle.dump(lp, f) return lp
def crossval(clf=None, X=None, y=None, folds=10, n=5, path=None): if X is None or y is None: X, y = get_train_data(path) if len(X) < folds: raise ValueError('There are not enough samples ({}). Need at least {}.'.format(len(X), folds)) clf = clf or get_model(path) tot = 0 print("KFold folds={}, running {} times".format(folds, n)) for i in range(n): res = cross_val_score(clf, X, y, cv=folds).mean() tot += res print("{}/{}: {}".format(i + 1, n, res)) print("-------- total --------") print(tot / n) return tot / n
def crossval(): X, y = get_train_data() lp = get_model() print(cross_validate_model(lp, X, y))