Python / Machine Learning танилцуулга (scikit-learn)

Machine Learning танилцуулга (scikit-learn)

Machine Learning (ML) бол компьютерт тусгайлан програмчлахгүйгээр өгөгдлөөс сурч шийдвэр гаргахыг заах арга юм. Кино зөвлөх систем, имэйлийн spam шүүлтүүр, зургаар объект таних — бүгд ML-ийн жишээ. scikit-learn бол Python дээрх хамгийн боловсронгуй, хэрэглэхэд хялбар ML library.

ML-ийн үндсэн ойлголт

ML-д гурван үндсэн ойлголт байдаг:

  • Feature — загварт оруулах оролтын шинж чанар (жишээ: өрөөний тоо, талбай)
  • Label — таамаглах зорилтот утга (жишээ: орон сууцны үнэ)
  • Model — feature-ээс label-г таамаглахыг сурсан математик функц

Ажлын урсгал дандаа нэг байдаг:

код
Өгөгдөл цуглуулах → Цэвэрлэх → Train/test хуваах → Загвар сургах → Үнэлэх → Ашиглах

Ангилал: spam шүүлтүүр

Эхний жишээнд имэйлийн текстийг spam эсвэл spam биш гэж ангилах загвар бүтээнэ:

python
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report

# Сургалтын өгөгдөл
имэйлүүд = [
    "Та сугалаанд хожлоо! Яаралтай дарна уу",
    "Чөлөөт мөнгө авах боломж. Нэн даруй бүртгүүл",
    "Өнөөдрийн уулзалт 3 цагт болно",
    "Тайлангаа маргааш илгээнэ үү",
    "Хямдралтай бүтээгдэхүүн! 90% хөнгөлөлт!!!",
    "Гэрийн даалгаврын хугацаа дууслаа",
    "Таны данс блоклогдлоо. Яаралтай нэвтэрнэ үү",
    "Маргааш хичээл 8 цагт эхэлнэ",
]
шошгонууд = [1, 1, 0, 0, 1, 0, 1, 0]   # 1=spam, 0=spam биш

# Текстийг тоон vector болгох
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(имэйлүүд)

# Train / test хуваах
X_train, X_test, y_train, y_test = train_test_split(
    X, шошгонууд, test_size=0.25, random_state=42
)

# Загвар сургах
загвар = MultinomialNB()
загвар.fit(X_train, y_train)

# Үнэлэх
таамаглал = загвар.predict(X_test)
print(f"Нарийвчлал: {accuracy_score(y_test, таамаглал):.0%}")

Регресс: үнэ таамаглах

Ангилал тоддоо утга буцаана. Регресс тасралтгүй тоон утга (жишээ: үнэ, температур) таамаглана:

python
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error, r2_score

# Жишээ өгөгдөл: [өрөө, талбай (м²)] → үнэ (сая ₮)
np.random.seed(42)
n = 100
өрөө   = np.random.randint(1, 6, n)
талбай = өрөө * 15 + np.random.normal(0, 5, n)
үнэ    = өрөө * 50 + талбай * 3 + np.random.normal(0, 20, n)

X = np.column_stack([өрөө, талбай])
y = үнэ

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

загвар = LinearRegression()
загвар.fit(X_train, y_train)

таамаглал = загвар.predict(X_test)
print(f"Дундаж алдаа: {mean_absolute_error(y_test, таамаглал):.1f} сая ₮")
print(f"R² оноо:      {r2_score(y_test, таамаглал):.3f}")   # 1.0 = төгс

# Шинэ орон сууц таамаглах: 3 өрөө, 55м²
шинэ = np.array([[3, 55]])
print(f"Таамаглах үнэ: {загвар.predict(шинэ)[0]:.0f} сая ₮")

Pipeline — бүгдийг нэгтгэх

Бодит төслүүдэд өгөгдөл хэвийнжүүлэх, feature боловсруулах, загвар сургах алхмуудыг pipeline-д нэгтгэдэг. Энэ нь кодыг цэвэр, дахин ашиглахад хялбар болгодог:

python
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score

# Iris цэцгийн дата (классик ML жишээ)
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=42
)

# Pipeline: хэвийнжүүлэх → загвар
pipeline = Pipeline([
    ("scaler", StandardScaler()),
    ("classifier", RandomForestClassifier(n_estimators=100, random_state=42)),
])

pipeline.fit(X_train, y_train)
print(f"Test нарийвчлал: {pipeline.score(X_test, y_test):.1%}")

# Cross-validation — найдвартай үнэлгээ
cv_оноо = cross_val_score(pipeline, iris.data, iris.target, cv=5)
print(f"CV дундаж: {cv_оноо.mean():.1%} ± {cv_оноо.std():.1%}")

ML-ийн суурь ойлголт авахад энэ хичээл хангалттай. Цааш нь XGBoost, TensorFlow, PyTorch зэрэг дэвшилтэт хэрэгслүүд байгаа боловч тэдгээрийн суурь нь энд сурсан зүйл — өгөгдөл цэвэрлэх, feature бэлдэх, загвар сургах, үнэлэх ажлын урсгал яг адилхан.

Дараагийн хичээлд:

Та курсын эцсийн төсөл-д хүрлээ! Энэ курсд сурсан бүх зүйлээ нэгтгэн жинхэнэ Python програм бүтээнэ — CSV өгөгдөл уншиж, цэвэрлэж, шинжилж, харагдуулж, CLI хэрэгсэл болгон ажиллуулна.