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
|