Pythonda chiziqli regressiya
Chiziqli regressiya ma'lumotlarni tahlil qilish va mashinani o'rganish uchun ishlatiladi. O'zingizning modelingizni Python-da yarating va birinchi natijalarni oling!
Regressiya nima?
Reqressiya o'zgaruvchilar o'rtasidagi munosabatlarni izlaydi.
Masalan, siz kompaniya xodimlarini qabul qilishingiz va ish haqi qiymati boshqa ma'lumotlarga bog'liqligini, masalan, ish tajribasi, ma'lumot darajasi, roli, ular ishlaydigan shahar va hokazo.
Regresiya har bir xodim uchun tahlil ma'lumotlarini yagona taqdim etish muammosini hal qiladi. Bundan tashqari, tajriba, ta'lim, rol va shahar - bu ish haqi ularga bog'liq bo'lgan mustaqil o'zgaruvchilar.
Xuddi shu tarzda, siz ma'lum bir hududdagi uylarning narxlari, xonalar soni, markazdan masofa va boshqalar o'rtasida matematik aloqani o'rnatishingiz mumkin.
Regressiya ma'lum bir hodisani va bir qator kuzatuvlarni ko'rib chiqadi. Har bir kuzatuv ikki yoki undan ko'p o'zgaruvchiga ega. Bitta o'zgaruvchini boshqalarga bog'liq deb taxmin qilsangiz, siz ular o'rtasida munosabatlarni o'rnatishga harakat qilmoqdasiz.
Boshqacha qilib aytganda, ba'zi o'zgaruvchilar yoki ma'lumotlarning boshqalarga bog'liqligini ko'rsatadigan funktsiyani topishingiz kerak.
Bog'langan ma'lumotlar bog'liq parametrlar, natijalar yoki javoblar deb nomlanadi.
Mustaqil ma'lumotlar mustaqil o'zgaruvchilar, kirishlar yoki predikatorlar deb nomlanadi.
Odatda, regressiyada bitta doimiy va cheksiz bog'liq o'zgaruvchi mavjud. Kirish parametrlari cheklanmagan, diskret yoki kategoriya ma'lumotlari bo'lishi mumkin, masalan, jinsi, millati, brendi va boshqalar.
Chiqish ma'lumotlarini "?", "Kirish ma'lumotlarini" deb belgilash odatiy holdir. Ikki yoki undan ko'p mustaqil o'zgaruvchilar bo'lsa, ularni vektor sifatida ko'rsatish mumkinmi? = (? ₁,…,? ᵣ), qaerda? - kiritiladigan o'zgaruvchilar soni.
Qachon regressiya kerak?
Regressiya yangi sharoitlarga javobni bashorat qilish uchun foydalidir. Turar-joy binosidagi elektr energiyasini haroratdan, kunning vaqtidan va odamlarning sonidan bilib olasiz.
U qayerda kerak?
Reqressiya ko'plab sohalarda qo'llaniladi: iqtisodiyot, kompyuter va ijtimoiy fanlar va boshqalar. Uning ahamiyati katta ma'lumotlarning mavjudligi bilan ortib bormoqda.
Chiziqli regressiya
Chiziqli regressiya eng muhim va keng tarqalgan regressiya usullaridan biridir. Bu eng oddiy regressiya usuli. Uning afzalliklaridan biri natijalarni sharhlash qulayligi.
Python-da chiziqli regressiyani amalga oshiring
Pythonda chiziqli regressiyani amalga oshirish vaqti keldi. Sizga kerak bo'lgan yagona narsa - to'g'ri to'plamlar, funktsiyalar va sinflar.
Chiziqli regressiya Python paketlari
NumPy bir o'lchovli va ko'p o'lchovli massivlarda tezkor ishlash uchun fundamental ilmiy to'plamdir. Bu matematik usulni engillashtiradi va, albatta, ochiq manbadir.
NumPy uchun yangi? Rasmiy qo'llanmadan boshlang.
Scikit-learn - bu kompyuterda keng qo'llaniladigan kutubxona. U ma'lumotlarni qayta ishlash uchun qiymatlarni beradi, pasayish, regressiya, tasniflash, klasterlash va boshqalarni amalga oshiradi, xuddi NumPy singari ochiq manbada.
Chiziqli modellarni va paketni scikit-learn-da qanday ishlashini boshlang.
Skritit-o'rganish bilan oddiy chiziqli regressiya
Eng oddiy chiziqli regressiya holatidan boshlaylik.
Chiziqli regressiyani amalga oshirish uchun besh bosqichni bajaring:
1. Kerakli paketlar va sinflarni import qiling.
2. Ishlash va konvertatsiya qilish uchun ma'lumotlarni taqdim eting.
3. Regressiya modelini yarating va mavjud ma'lumotlarga moslang.
4. Hizalama natijalarini va qoniqarli modelni tekshiring.
5. Modelni bashorat qilish uchun qo'llang.
Bu ko'p regressiya yondashuvlari va amalga oshirilishlari uchun umumiy qadamlar.
1-qadam: import paketlar va sinflar
Birinchi qadam NumPy to'plami va LinearRegression sinfini sklearn.linear_model-dan import qilishdir:
import numpy as np
from sklearn.linear_model import LinearRegression
Endi siz chiziqli regressiyani amalga oshirish uchun barcha funktsiyalarga egasiz.
Numpy-ning fundamental turi - bu numpy.ndarray massiv turi. Keyinchalik, qator numpy.ndarray tipidagi barcha holatlarga tegishli.
Sklearn.linear_model.LinearRegression klassi chiziqli regressiya va bashorat qilish uchun ishlatiladi.
2-qadam: ma'lumotlarni taqdim eting
Ikkinchi qadam, ishlash uchun ma'lumotlarni aniqlash. Kirishlar (regressorlar ,?) va chiqish (predictor ,?) qatorlar (numpy.ndarray sinfining misollari) yoki shunga o'xshash ob'ektlar bo'lishi kerak. Bu erda regressiya ma'lumotlarini taqdim etishning eng oddiy usuli:
x = np.array([5, 15, 25, 35, 45, 55]).reshape((-1, 1))
y = np.array([5, 20, 14, 32, 22, 38])
Endi ikkita qator mavjud: kirish x va chiqish y. Siz .reshape () ni x-ga qo'ng'iroq qilishingiz kerak, chunki bu qator ikki o'lchovli yoki aniqroq bo'lishi kerak - bitta ustun va kerakli sonli qatorlarga ega. Bu (-1, 1) argument aniq belgilaydi.
Hozir x va y qanday ko'rinishda:
>>> print(x)
[[ 5]
[15]
[25]
[35]
[45]
[55]]
>>> print(y)
[ 5 20 14 32 22 38]
3-qadam: modelni yarating
Ushbu bosqichda chiziqli regressiya modelini yarating va mavjud ma'lumotlarga moslang.
LinearRegression sinfining regressiya modelini ko'rsatadigan misolini yarataylik.
model = LinearRegression()
Ushbu operatsiya LinearRegression misoli sifatida o'zgaruvchan modelni yaratadi. LinearRegression sinfiga bir nechta qo'shimcha parametrlarni berishingiz mumkin:
• fit_intercept bu segmentni hisoblash kerakmi (otrez (True) yoki uni nolga teng (False) deb hisoblash).
Normallashtirish - bu kirish parametrlarini (True) yoki yo'qligini (noto'g'ri) normalizatsiya qilish-qilmaslikni belgilovchi buoolik (sukut bo'yicha noto'g'ri) parametridir.
• copy_X - bu nusxa ko'chirish (True) yoki kiritish parametrlarini (False) qayta yozishni tanlashda mantiqiy parametr (asl qiymati bo'yicha).
• n_jobs - bu parallel hisoblashda qatnashadigan jarayonlar sonini aks ettiruvchi butun son yoki None (asl qiymati). Hech biri hech qanday jarayonni anglatmaydi, -1 barcha mavjud protsessorlardan foydalanadi.
Bizning misolimizda standart holat holatlari qo'llaniladi.
Modeldan foydalanish vaqti keldi. Birinchi qo'ng'iroq .fit () modelida:
model.fit(x, y)
.Fit () og'irliklar uchun optimal qiymatlarni hisoblaydi? Input va? Mavjud bo'lgan kirish va chiqish (x va y) ni argument sifatida ishlatish. Boshqacha qilib aytganda, .fit () modelni hizalaydi. O'zini, o'zgaruvchan modelni qaytaradi. Shuning uchun, oxirgi ikkita operatsiyani quyidagilar bilan almashtirishingiz mumkin:
model = LinearRegression().fit(x, y)
Ushbu operatsiyani bajarish qisqaroq va avvalgisi bilan bir xil.
4-qadam: Natijalarni oling
Modelni moslashtirgandan so'ng, natijalarni sharhlash uchun qoniqarli ekanligini tekshirish kerak.
Siz (? ²) belgisini modelga chaqirilgan .score () yordamida olishingiz mumkin:
>>> r_sq = model.score(x, y)
>>> print('coefficient of determination:', r_sq)
coefficient of determination: 0.715875613747954
.score () x predmetik x va regressorni argument sifatida qabul qiladi va qaytadi? ².
modelda koeffitsientni ifodalovchi .intercept_ atributlari va?? ni ifodalovchi .coef_ bilan? ₁:
>>> print('intercept:', model.intercept_)
intercept: 5.633333333333329
>>> print('slope:', model.coef_)
slope: [0.54]
Yuqoridagi kod "₀" va "₁" ni olish usulini ko'rsatadi. E'tibor bering, .intercept_ bu skalar, .coef_ esa - bu massiv.
? 5.6 = 5.63 ning taxminiy qiymati sizning modelingiz 5.63 ga qachon va qachon nolga teng javob berishini bashorat qilmoqda. Equality ₁ = 0.54 tengligi, bashorat qilingan javob bittaga ko'paytirilganda 0,54 ga ko'tarilishini anglatadi.
Shuni esda tutingki, y-ni ikki o'lchovli qator sifatida berishingiz mumkin. Keyin natijalar farq qilmaydi:
>>> new_model = LinearRegression().fit(x, y.reshape((-1, 1)))
>>> print('intercept:', new_model.intercept_)
intercept: [5.63333333]
>>> print('slope:', new_model.coef_)
slope: [[0.54]]
Ko'rib turganingizdek, misol oldingisiga o'xshash, ammo bu holda .intercept_ bitta elementli bitta o'lchovli massivmi? ₀, va .coef_ bitta elementli ikki o'lchovli massivmi? ₁.
5-qadam: javobni bashorat qiling
Modelingizdan mamnun bo'lganingizdan so'ng, uni joriy yoki boshqa ma'lumotlar bilan bashorat qilish uchun ishlatishingiz mumkin.
.Predict () yordamida taxmin qilingan javobni oling:
>>> y_pred = model.predict(x)
>>> print('predicted response:', y_pred, sep='\n')
predicted response:
[ 8.33333333 13.73333333 19.13333333 24.53333333 29.93333333 35.33333333]
.Predict () dan foydalanib, regressorni argument sifatida o'tkazasiz va tegishli javobni olasiz.
Bu erda javobni taxmin qilishning deyarli bir xil usuli:
>>> y_pred = model.intercept_ + model.coef_ * x
>>> print('predicted response:', y_pred, sep='\n')
predicted response:
[[ 8.33333333]
[13.73333333]
[19.13333333]
[24.53333333]
[29.93333333]
[35.33333333]]
Bunday holda, siz x massivining har bir elementini model.coef_ bilan ko'paytirasiz va mahsulotingizga model.intercept_ qo'shasiz.
Xulosa avvalgi misoldan o'lchovlar sonidan farq qiladi. Endi bashorat qilingan javob bir o'lchovli bo'lgan oldingi holatdan farqli o'laroq, ikki o'lchovli qatordir.
X o'lchovlar sonini bittaga o'zgartiring va siz bir xil natijani ko'rasiz. Buning uchun x-ni model.coef_ ga ko'paytirganda x.reshape (-1), x.flatten () yoki x.ravel () bilan almashtiring.
Amalda, bashorat qilish uchun ko'pincha regressiya modeli qo'llaniladi. Bu boshqa, yangi kirishlar asosida chiqishni hisoblash uchun moslashtirilgan modellardan foydalanishingiz mumkin degan ma'noni anglatadi:
>>> x_new = np.arange(5).reshape((-1, 1))
>>> print(x_new)
[[0]
[1]
[2]
[3]
[4]]
>>> y_new = model.predict(x_new)
>>> print(y_new)
[5.63333333 6.17333333 6.71333333 7.25333333 7.79333333]
Bu erda .predict () x_new yangi regressatorida qo'llaniladi va natijada y_new javob beradi. Ushbu misol yordamida 5 (eksklyuziv) - 0, 1, 2, 3 va 4 elementlari bilan qator yaratish uchun NumPy-dan arange () dan foydalaniladi.
LinearRegression haqida ko'proq ma'lumotni rasmiy hujjatlardan olishingiz mumkin.
Endi sizning chiziqli regressiya modelingiz bor!
Do'stlaringiz bilan baham: |