hç
commited on
Upload 5 files
Browse files- README.md +106 -1
- app.py +42 -0
- model.pkl +3 -0
- model.py +28 -0
- requirements.txt +4 -0
README.md
CHANGED
|
@@ -1,3 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 📱 Mobile Price Classification with Machine Learning
|
| 2 |
+
|
| 3 |
+
Bu proje, bir cep telefonunun donanımsal özelliklerine göre hangi fiyat aralığında olduğunu tahmin eden bir makine öğrenmesi modelidir.
|
| 4 |
+
Streamlit arayüzü ile kullanıcı, telefonun teknik özelliklerini girerek tahmini fiyat aralığını öğrenebilir.
|
| 5 |
+
|
| 6 |
---
|
| 7 |
+
|
| 8 |
+
## 🔍 Problem Tanımı
|
| 9 |
+
|
| 10 |
+
Cep telefonları farklı donanım seviyelerinde sunulur. Bu proje, çeşitli teknik özelliklere bakarak bir telefonun fiyat segmentini (0: en düşük, 3: en yüksek) sınıflandırmayı amaçlar.
|
| 11 |
+
|
| 12 |
---
|
| 13 |
+
|
| 14 |
+
## 📦 Kullanılan Veri Seti
|
| 15 |
+
|
| 16 |
+
- Dataset: [`mobile_prices.csv`](./mobile_prices.csv)
|
| 17 |
+
- Sütun Sayısı: 21 (20 giriş + 1 hedef)
|
| 18 |
+
- Hedef (target): `price_range`
|
| 19 |
+
|
| 20 |
+
---
|
| 21 |
+
|
| 22 |
+
## 🛠 Kullanılan Özellikler
|
| 23 |
+
|
| 24 |
+
- `battery_power`, `ram`, `px_height`, `px_width`, `fc`, `pc`
|
| 25 |
+
- `bluetooth`, `dual_sim`, `four_g`, `three_g`, `wifi`
|
| 26 |
+
- `n_cores`, `int_memory`, `mobile_wt`
|
| 27 |
+
- `sc_h`, `sc_w`, `talk_time`, `clock_speed`, `touch_screen`
|
| 28 |
+
|
| 29 |
+
---
|
| 30 |
+
|
| 31 |
+
## 🔧 Kullanılan Kütüphaneler
|
| 32 |
+
|
| 33 |
+
- `pandas`
|
| 34 |
+
- `numpy`
|
| 35 |
+
- `scikit-learn`
|
| 36 |
+
- `streamlit`
|
| 37 |
+
- `pickle`
|
| 38 |
+
|
| 39 |
+
---
|
| 40 |
+
|
| 41 |
+
## 🤖 Model Bilgisi
|
| 42 |
+
|
| 43 |
+
- Algoritma: `RandomForestClassifier`
|
| 44 |
+
- Doğruluk: %X (eğitim sırasında çıktı)
|
| 45 |
+
- Model dosyası: [`model.pkl`](./model.pkl)
|
| 46 |
+
|
| 47 |
+
---
|
| 48 |
+
|
| 49 |
+
## 🚀 Nasıl Çalıştırılır?
|
| 50 |
+
|
| 51 |
+
### 1. Gerekli paketleri yükle:
|
| 52 |
+
```bash
|
| 53 |
+
pip install -r requirements.txt
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
Streamlit uygulamasını başlat
|
| 58 |
+
Demo (Opsiyonel)
|
| 59 |
+
Model Hugging Face'e yüklendiyse burada paylaşılabilir:
|
| 60 |
+
|
| 61 |
+
🔗 https://huggingface.co/yazodi
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
📦 Mobile Price Classification
|
| 65 |
+
┣ 📜 mobile_prices.csv
|
| 66 |
+
┣ 📜 model.pkl
|
| 67 |
+
┣ 📜 model.py
|
| 68 |
+
┣ 📜 app.py
|
| 69 |
+
┣ 📜 requirements.txt
|
| 70 |
+
┗ 📜 README.md
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
kendiniz olşturun
|
| 75 |
+
Örnek Girdi (sample_input.json)
|
| 76 |
+
|
| 77 |
+
{
|
| 78 |
+
"battery_power": 1200,
|
| 79 |
+
"blue": 1,
|
| 80 |
+
"clock_speed": 1.6,
|
| 81 |
+
"dual_sim": 1,
|
| 82 |
+
"fc": 5,
|
| 83 |
+
"four_g": 1,
|
| 84 |
+
"int_memory": 32,
|
| 85 |
+
"mobile_wt": 150,
|
| 86 |
+
"n_cores": 4,
|
| 87 |
+
"pc": 13,
|
| 88 |
+
"px_height": 800,
|
| 89 |
+
"px_width": 1200,
|
| 90 |
+
"ram": 2048,
|
| 91 |
+
"sc_h": 14,
|
| 92 |
+
"sc_w": 7,
|
| 93 |
+
"talk_time": 10,
|
| 94 |
+
"three_g": 1,
|
| 95 |
+
"touch_screen": 1,
|
| 96 |
+
"wifi": 1
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
📌 Notlar
|
| 102 |
+
Eğitim amaçlı hazırlanmıştır.
|
| 103 |
+
|
| 104 |
+
Gerçek ticari modellerde daha fazla veri ve hiperparametre optimizasyonu gerekebilir.
|
| 105 |
+
|
| 106 |
+
|
| 107 |
+
🪪 Lisans
|
| 108 |
+
MIT License
|
app.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import pickle
|
| 3 |
+
import numpy as np
|
| 4 |
+
|
| 5 |
+
# Modeli yükle
|
| 6 |
+
with open("model.pkl", "rb") as f:
|
| 7 |
+
model = pickle.load(f)
|
| 8 |
+
|
| 9 |
+
st.title("📱 Mobile Price Range Prediction")
|
| 10 |
+
st.write("Telefon özelliklerine göre fiyat aralığını tahmin edin. (0: En düşük, 3: En yüksek)")
|
| 11 |
+
|
| 12 |
+
# 20 özelliği kullanıcıdan alalım:
|
| 13 |
+
battery_power = st.slider("🔋 Battery Power (mAh)", 500, 2000, 1000)
|
| 14 |
+
blue = st.selectbox("📶 Bluetooth Var mı?", [0, 1])
|
| 15 |
+
clock_speed = st.slider("⏱ Clock Speed (GHz)", 0.5, 3.0, 1.5)
|
| 16 |
+
dual_sim = st.selectbox("📱 Çift SIM Var mı?", [0, 1])
|
| 17 |
+
fc = st.slider("🤳 Ön Kamera (MP)", 0, 20, 5)
|
| 18 |
+
four_g = st.selectbox("📡 4G Desteği", [0, 1])
|
| 19 |
+
int_memory = st.slider("💾 Dahili Hafıza (GB)", 2, 64, 16)
|
| 20 |
+
mobile_wt = st.slider("⚖️ Ağırlık (gram)", 80, 250, 150)
|
| 21 |
+
n_cores = st.slider("🧠 İşlemci Çekirdek Sayısı", 1, 8, 4)
|
| 22 |
+
pc = st.slider("📸 Arka Kamera (MP)", 0, 20, 13)
|
| 23 |
+
px_height = st.slider("🔳 Piksel Yüksekliği", 0, 1960, 500)
|
| 24 |
+
px_width = st.slider("🔲 Piksel Genişliği", 0, 2000, 800)
|
| 25 |
+
ram = st.slider("🧠 RAM (MB)", 256, 4000, 1024)
|
| 26 |
+
sc_h = st.slider("📱 Ekran Yüksekliği (cm)", 5, 20, 12)
|
| 27 |
+
sc_w = st.slider("📱 Ekran Genişliği (cm)", 0, 18, 7)
|
| 28 |
+
talk_time = st.slider("📞 Konuşma Süresi (saat)", 2, 20, 10)
|
| 29 |
+
three_g = st.selectbox("📡 3G Var mı?", [0, 1])
|
| 30 |
+
touch_screen = st.selectbox("🖱 Dokunmatik Ekran Var mı?", [0, 1])
|
| 31 |
+
wifi = st.selectbox("📶 Wi-Fi Desteği", [0, 1])
|
| 32 |
+
|
| 33 |
+
# Girdi vektörü (20 özellik)
|
| 34 |
+
input_data = np.array([[battery_power, blue, clock_speed, dual_sim, fc,
|
| 35 |
+
four_g, int_memory, mobile_wt, n_cores, pc,
|
| 36 |
+
px_height, px_width, ram, sc_h, sc_w,
|
| 37 |
+
talk_time, three_g, touch_screen, wifi]])
|
| 38 |
+
|
| 39 |
+
# Tahmin
|
| 40 |
+
if st.button("Tahmin Et"):
|
| 41 |
+
prediction = model.predict(input_data)[0]
|
| 42 |
+
st.success(f"📊 Tahmini Fiyat Aralığı: {prediction} (0: düşük, 3: yüksek)")
|
model.pkl
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fc0cb197b61749f0f9a77688f17a1d2ad1ee2fdfbb61d3e477a549436d0961d8
|
| 3 |
+
size 5630937
|
model.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# model.py
|
| 2 |
+
import pandas as pd
|
| 3 |
+
from sklearn.model_selection import train_test_split
|
| 4 |
+
from sklearn.ensemble import RandomForestClassifier
|
| 5 |
+
from sklearn.metrics import accuracy_score
|
| 6 |
+
import pickle
|
| 7 |
+
|
| 8 |
+
# Veriyi oku
|
| 9 |
+
df = pd.read_csv("mobile_prices.csv")
|
| 10 |
+
|
| 11 |
+
# Özellikleri ve hedefi ayır
|
| 12 |
+
X = df.drop("price_range", axis=1)
|
| 13 |
+
y = df["price_range"]
|
| 14 |
+
|
| 15 |
+
# Eğitim-test bölmesi
|
| 16 |
+
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
| 17 |
+
|
| 18 |
+
# Modeli eğit
|
| 19 |
+
model = RandomForestClassifier()
|
| 20 |
+
model.fit(X_train, y_train)
|
| 21 |
+
|
| 22 |
+
# Doğruluk
|
| 23 |
+
y_pred = model.predict(X_test)
|
| 24 |
+
print("Accuracy:", accuracy_score(y_test, y_pred))
|
| 25 |
+
|
| 26 |
+
# Modeli kaydet
|
| 27 |
+
with open("model.pkl", "wb") as f:
|
| 28 |
+
pickle.dump(model, f)
|
requirements.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
streamlit
|
| 2 |
+
scikit-learn
|
| 3 |
+
pandas
|
| 4 |
+
numpy
|