మెకానికల్ లెర్నింగ్ - లీనర్ రీగ్రెషన్

రీగ్రెషన్

మీరు వేరు వేరు విభాగాల మధ్య సంబంధాలను కనుగొనడానికి ప్రయత్నిస్తే, 'రీగ్రెషన్' (regression) అనే పదాన్ని ఉపయోగిస్తారు.

మెషీన్ లెర్నింగ్ మరియు స్టాటిస్టికల్ మోడలింగ్‌లో, ఈ సంబంధం భవిష్యత్తు ఘటనల ఫలితాలను అంచనా వేయడానికి ఉపయోగిస్తారు.

线性回归

线性回归使用数据点之间的关系在所有数据点之间画一条直线。

这条线可以用来预测未来的值。


在机器学习中,预测未来非常重要。

工作原理

Python 提供了一些方法来查找数据点之间的关系并绘制线性回归线。我们将向您展示如何使用这些方法而不是通过数学公式。

在下面的示例中,x 轴表示车龄,y 轴表示速度。我们已经记录了 13 辆汽车通过收费站时的车龄和速度。让我们看看我们收集的数据是否可以用于线性回归:

ఉదాహరణ

首先绘制散点图:

import matplotlib.pyplot as plt
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
plt.scatter(x, y)
plt.show()

ఫలితం:


ఉదాహరణను నడుపుము

ఉదాహరణ

导入 scipy 并绘制线性回归线:

import matplotlib.pyplot as plt
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
  return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

ఫలితం:


ఉదాహరణను నడుపుము

例子解释

导入所需模块:

import matplotlib.pyplot as plt
from scipy import stats

创建表示 x 和 y 轴值的数组:

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

执行一个方法,该方法返回线性回归的一些重要键值:

slope, intercept, r, p, std_err = stats.linregress(x, y)

ఒక ఉపయోగించడానికి సృష్టించండి slope మరియు intercept అంచనాల ఫంక్షన్ కొత్త అంచనాల విలువను తిరిగి ఇస్తుంది. ఈ కొత్త అంచనాల విలువ అనేది y అంచనాల వాటిలో అనుసరించబడే x అంచనాల వాటి స్థానాన్ని సూచిస్తుంది:

def myfunc(x):
  return slope * x + intercept

ఫంక్షన్ ద్వారా x అంచనాల ప్రతి విలువను నడుపుతుంది. ఇది కొత్త అంచనాల ప్రతి విలువను సృష్టిస్తుంది, అది y అంచనాల వాటిలో ఉంటుంది:

mymodel = list(map(myfunc, x))

మూల స్పట్టిగ్రాఫ్ జతచేయండి:

plt.scatter(x, y)

లైనర్ రీగ్రెషన్ లైన్ జతచేయండి:

plt.plot(x, mymodel)

చిత్రాన్ని చూపించండి:

plt.show()

R-Squared

ముఖ్యంగా, x మరియు y అంచనాల మధ్య ఉన్న సంబంధం మంచిది ఎంతగా తెలుసుకోవాలి, సంబంధం లేకపోతే లైనర్ రీగ్రెషన్ ఏదీ అంచనా కట్టలేదు.

ఈ సంబంధం రెండవ అంచనాలు r^2 (r-squared) విలువ ద్వారా అందిస్తారు.

r^2 విలువల పరిధి 0 నుండి 1 వరకు ఉంది, అది 0 అనేది అసంబంధితం అని అర్థం చేస్తుంది, మరియు 1 అనేది 100% సంబంధితం అని అర్థం చేస్తుంది.

Python మరియు Scipy మాడ్యూల్ మీకు ఈ విలువను కంటించవచ్చు, మీరు అనుసరించవలసిన దాని చేయండి మరియు x మరియు y విలువలను అందించండి:

ఉదాహరణ

నా డేటా లైనర్ రీగ్రెషన్ లో అనుగుణత ఎలా ఉంది?

from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
print(r)

ఉదాహరణను నడుపుము

ప్రకటన:ఫలితం -0.76 ఒక రంగంలో సంబంధం ఉందని చెప్పేది, కానీ పరిపూర్ణమైన సంబంధం కాదు, కానీ మనం భవిష్యత్తు అంచనాలలో లైనర్ రీగ్రెషన్ ఉపయోగించవచ్చు అని చెప్పేది.

భవిష్యత్తు విలువలను అంచనా కట్టండి

ఇప్పుడు, మేము సేకరించిన సమాచారంతో భవిష్యత్తు విలువలను అంచనా కట్టగలము.

ఉదాహరణకు: ఒక 10 సంవత్సరాల చరిత్రతో ఉన్న కారు వేగాన్ని అంచనా కట్టడానికి ప్రయత్నించండి.

ఈ కారణంగా, మాకు పూర్వ ఉదాహరణలో ఉన్న అదే విధమైన విధానాన్ని అవసరం ఉంది: myfunc() ఫంక్షన్:

def myfunc(x):
  return slope * x + intercept

ఉదాహరణ

ఒక 10 సంవత్సరాల చాలుకు ఉన్న కారు వేగాన్ని అంచనా కట్టండి:

from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
  return slope * x + intercept
speed = myfunc(10)
print(speed)

ఉదాహరణను నడుపుము

ఈ ఉదాహరణలో అంచనా వేగం 85.6 ఉంది, మరియు మేము చిత్రం నుండి కూడా చదవగలము:


చెడు అనుగుణత ఉందా?

మాకు ఒక ఉదాహరణ సృష్టించండి, లోని లైనర్ రీగ్రెషన్ భవిష్యత్తు విలువలను అధికారంగా అంచనా కట్టడానికి ఉత్తమ పద్ధతి కాదు.

ఉదాహరణ

x మరియు y అక్షాల ఈ విలువలు సాధారణ పునర్వికాసానికి చాలా చిన్న ఫిట్ ని కలిగిస్తాయి:

import matplotlib.pyplot as plt
from scipy import stats
x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
  return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

ఫలితం:


ఉదాహరణను నడుపుము

మరియు r-squared విలువను?

ఉదాహరణ

మీరు చాలా తక్కువ r-squared విలువను పొందారు.

import numpy
from scipy import stats
x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
slope, intercept, r, p, std_err = stats.linregress(x, y)
print(r)

ఉదాహరణను నడుపుము

ఫలితం: 0.013 అనేది సంబంధం చాలా చిన్నది అని చెప్పడం మరియు ఈ డేటాసెట్ సాధారణ పునర్వికాసానికి సరిపోదని చెప్పబడుతుంది.