diff --git a/AI projects/Requirements.txt b/AI projects/Requirements.txt new file mode 100644 index 0000000..6b0a150 --- /dev/null +++ b/AI projects/Requirements.txt @@ -0,0 +1,4 @@ +numpy>=1.22 +pandas>=1.4 +scikit-learn>=1.1 +joblib>=1.2 \ No newline at end of file diff --git a/AI projects/Weather Predictor/Data/sample_weather.csv b/AI projects/Weather Predictor/Data/sample_weather.csv new file mode 100644 index 0000000..3749679 --- /dev/null +++ b/AI projects/Weather Predictor/Data/sample_weather.csv @@ -0,0 +1,3 @@ +temp_prev , humidity_prev , wind_speed_prev , day_of_year , target_temp +25.0 , 60 , 5.2 , 100 , 26.3 +24.5 , 63 , 6.1 , 101 , 25.7 diff --git a/AI projects/Weather Predictor/Readme.md b/AI projects/Weather Predictor/Readme.md new file mode 100644 index 0000000..46ce324 --- /dev/null +++ b/AI projects/Weather Predictor/Readme.md @@ -0,0 +1,20 @@ +# Weather Predictor (example AI project) + +**Category:** Regression / machine learning +**Language:** Python + +## Overview +A small example project that demonstrates how to build a simple temperature predictor using scikit-learn. + +## Contents +- `weather_predictor.py` - main script with train/predict subcommands +- `data/sample_weather.csv` - small sample dataset +- `requirements.txt` - Python dependencies + +## Setup +Create a virtual environment and install dependencies: + +```bash +python -m venv venv +source venv/bin/activate # Windows: venv\Scripts\activate +pip install -r requirements.txt diff --git a/AI projects/Weather Predictor/weather_predictor.py b/AI projects/Weather Predictor/weather_predictor.py new file mode 100644 index 0000000..d8492a5 --- /dev/null +++ b/AI projects/Weather Predictor/weather_predictor.py @@ -0,0 +1,80 @@ +""" +Weather Predictor - simple regression example using scikit-learn. + +This script demonstrates: +- loading CSV data (features and target) +- splitting train/test +- training a simple RandomForestRegressor (or LinearRegression) +- saving the model with joblib +- making predictions from a CSV of new inputs +""" + +import os +import argparse +import pandas as pd +import numpy as np +from sklearn.ensemble import RandomForestRegressor +from sklearn.model_selection import train_test_split +from sklearn.metrics import mean_squared_error +import joblib + +DEFAULT_MODEL = "weather_model.joblib" + +def load_data(csv_path): + """ + Expected CSV columns example: + temp_prev, humidity_prev, wind_speed_prev, day_of_year, target_temp + """ + df = pd.read_csv(csv_path) + # simple check + if 'target_temp' not in df.columns: + raise ValueError("CSV must contain a 'target_temp' column as target.") + X = df.drop(columns=['target_temp']) + y = df['target_temp'] + return X, y + +def train(csv_path, out_model=DEFAULT_MODEL): + X, y = load_data(csv_path) + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) + model = RandomForestRegressor(n_estimators=100, random_state=42) + model.fit(X_train, y_train) + preds = model.predict(X_test) + mse = mean_squared_error(y_test, preds) + print(f"Trained model. Test MSE: {mse:.4f}") + joblib.dump(model, out_model) + print(f"Saved model to: {out_model}") + +def predict(model_path, inputs_csv, out_csv=None): + model = joblib.load(model_path) + X_new = pd.read_csv(inputs_csv) + preds = model.predict(X_new) + X_new['predicted_temp'] = preds + if out_csv: + X_new.to_csv(out_csv, index=False) + print(f"Saved predictions to: {out_csv}") + else: + print(X_new) + +def main(): + parser = argparse.ArgumentParser(description="Weather Predictor (simple example)") + sub = parser.add_subparsers(dest="cmd", required=True) + + t = sub.add_parser("train", help="Train model from CSV") + t.add_argument("--data", required=True, help="CSV file with training data") + t.add_argument("--out", default=DEFAULT_MODEL, help="Output model path") + + p = sub.add_parser("predict", help="Predict using trained model") + p.add_argument("--model", required=True, help="Path to trained model (.joblib)") + p.add_argument("--input", required=True, help="CSV file with feature rows to predict") + p.add_argument("--out", default=None, help="Optional output CSV for predictions") + + args = parser.parse_args() + if args.cmd == "train": + train(args.data, args.out) + elif args.cmd == "predict": + predict(args.model, args.input, args.out) + else: + parser.print_help() + +if __name__ == "__main__": + main() diff --git a/PyVerse b/PyVerse new file mode 160000 index 0000000..62780b7 --- /dev/null +++ b/PyVerse @@ -0,0 +1 @@ +Subproject commit 62780b7a031975d4710caa1485a622982f9ea20a