The California House Price Prediction project leverages machine learning to forecast house prices based on various factors such as location, median income, and average rooms per household. By building a comprehensive data pipeline, we aim to predict house prices with high accuracy and provide actionable insights.
✨ Key Features
🔍 Data Preprocessing & Cleaning: Handle missing values, detect outliers, and normalize data for optimal model performance.
📊 Exploratory Data Analysis (EDA): Visualize correlations and trends to extract meaningful insights.
🛠 Machine Learning Pipeline: Automated feature engineering, model selection, and hyperparameter tuning.
📈 Support for Multiple Regression Models: Compare different models to achieve the best prediction accuracy.
📂 Project Structure
california-house-price-prediction/
│
├── data/ # Dataset files (raw and processed)
├── Notebooks/ # Jupyter notebooks for analysis and experiments
│ ├──California_house_model (1).ipynb # Jupyter Notebook Code
├── src/ # Source code for data processing and model training
│ ├──california_house_model.py # Python Code
├── requirements.txt # Python dependencies
├── .gitignore # Ignored files and directories
└── README.md # Project documentation
🚀 Installation & Setup
Clone the Repository:
git clone https://github.com/Fujelhrx/California-House-Model.git
cd california-house-price-prediction
Install Dependencies:
pip install -r requirements.txt
Run the Jupyter Notebook:
jupyter notebook
🛠 Usage
Open California_house_model.ipynb and run all cells to preprocess the data, train the model, and evaluate predictions.
For command-line usage, execute the training script:
python src/california_house_model.py
Custom Transformers Example
The script demonstrates how to build custom transformers using BaseEstimator and TransformerMixin, such as:
StandardScalerClone: A custom standard scaler.
ClusterSimilarity: Computes RBF kernel similarity to cluster centers.
Future Improvements
Add machine learning model training and evaluation.
Optimize the feature engineering process.
Implement hyperparameter tuning for better prediction accuracy.
🤝 Contributing
We welcome contributions from the community! Here’s how you can help:
Fork the repository.
Create a new branch for your feature or bugfix.
Submit a pull request with a detailed explanation.
📜 License
This project is licensed under the MIT License. See the LICENSE file for details.
🌟 Acknowledgments
scikit-learn: For providing the essential machine learning tools.
California Housing Dataset: The backbone of our data.
Open-source Contributors: For their continuous support and contributions.
📬 Contact Us
We’d love to hear from you! If you have any questions, feedback or suggestions, feel free to reach out:
Q: What dataset is used?
A: The dataset is a publicly available California housing dataset that includes features such as median income, location, and the number of rooms.
Q: Can I adapt this project for another region?
A: Absolutely! Modify the preprocessing and data handling steps to fit your custom dataset.
A playground repository to reproduce RxJS-like behaviour with as goal to create a fully dynamic dependencyless DOM framework in vanilla JS.
Conclusion
Reactivity
Bad idea to reinvent the RxJS wheel. Working on this codebase was a good learning experience to understand their design choices.
Upon stumbling on issues, the workarounds make you automatically lean towards RxJS paradigms. Reproducing reactive logic would serve as a great lesson for advanced JS students to recognize memory leaks and zombie logic.
Dynamic DOM
The dyn(obj) syntax is AWESOME. It is very intuitive, but the elephant in the room is that your teardown logic will be inaccessible when Proxying setters using the a = b syntax. If the object is destroyed, the hooks/mutators (== RxJS subscriptions/pipes) will keep triggering.
Proposed solution
Teardown logic can be gathered in the return value of dyn(). An alternative is to automatically run teardown logic by using either custom elements like <dyn-div> which have access to HTMLElement lifecycle events or using hacks like animationstart to derive it from native HTML elements.
In this sandbox, even reactive arguments were supported. It felt like a breakthrough to use them until combining two reactive arguments felt off. If you want to inject two reactive parameters and need them settled, you’d need to merge them beforehand and pass them as fn(...arguments), which will require some
HTML/JS support
Plain HTML starts to feel outdated. Where are the reactive programming languages? (angular somewhat solved it)
Future
Might come back to this later, but limitations of HTML5 let me down a bit too much to be sure.
This project is developed as part of a university thesis, focusing on creating a Pwnagotchi plugin that uploads WPA handshake captures. Additionally, a web application is implemented to process these handshakes using Hashcat.
Pwnagotchi Plugin Installation and Configuration
Installation
First, you need to install the Pwnagotchi plugin. Download or place the plugin into the Pwnagotchi system, then follow the plugin installation instructions provided in the Pwnagotchi documentation or use the following command (replace plugin-name with the actual name of the plugin):
sudo pwnagotchi plugins install plugin-name
Configuration
After installing the plugin, add the following configuration to your config.toml:
You will receive the api_key when you register on the web application. This key is necessary for the plugin to authenticate and communicate with the backend.
Backend
The backend is built using Node.js.
Tools needed
Hashcat
hcxpcapngtool
Databases
MongoDB
Redis
.env example
Create a .env file with the following environment variables:
# Terminal 1
$ source~/ros2_ws/install/setup.bash
$ ros2 run rt_usb_9axisimu_driver rt_usb_9axisimu_driver
# Terminal 2
$ source~/ros2_ws/install/setup.bash
# User can plug-in/out the IMU module at unconfigure state.
$ ros2 lifecycle set rt_usb_9axisimu_driver configure
$ ros2 lifecycle set rt_usb_9axisimu_driver activate
# The node start publishing the topics.# Stop publishing
$ ros2 lifecycle set rt_usb_9axisimu_driver deactivate
$ ros2 lifecycle set rt_usb_9axisimu_driver cleanup
# User can plug-in/out the IMU module at unconfigure state.# User can set parameters of the node.
$ ros2 param set /rt_usb_9axisimu_driver frame_id "imu2-link"
$ ros2 param set /rt_usb_9axisimu_driver port "/dev/ttyACM1"
$ ros2 lifecycle set rt_usb_9axisimu_driver configure
$ ros2 lifecycle set rt_usb_9axisimu_driver activate
# The node start publishing the topics.
# Terminal 1
$ source~/ros2_ws/install/setup.bash
$ ros2 run rt_usb_9axisimu_driver rt_usb_9axisimu_driver
# Terminal 2
$ source~/ros2_ws/install/setup.bash
# User can plug-in/out the IMU module at unconfigure state.
$ ros2 lifecycle set rt_usb_9axisimu_driver configure
$ ros2 lifecycle set rt_usb_9axisimu_driver activate
# The node start publishing the topics.# Stop publishing
$ ros2 lifecycle set rt_usb_9axisimu_driver deactivate
$ ros2 lifecycle set rt_usb_9axisimu_driver cleanup
# User can plug-in/out the IMU module at unconfigure state.# User can set parameters of the node.
$ ros2 param set /rt_usb_9axisimu_driver frame_id "imu2-link"
$ ros2 param set /rt_usb_9axisimu_driver port "/dev/ttyACM1"
$ ros2 lifecycle set rt_usb_9axisimu_driver configure
$ ros2 lifecycle set rt_usb_9axisimu_driver activate
# The node start publishing the topics.