ম্যাটপ্ল্লোব / নম্পি সহ লিনিয়ার রিগ্রেশন


89

আমি যে ছড়িয়ে ছিটিয়ে থাকা প্লট তৈরি করেছি তাতে লিনিয়ার রিগ্রেশন জেনারেট করার চেষ্টা করছি, তবে আমার ডেটা তালিকার ফর্ম্যাটে রয়েছে এবং ব্যবহারের জন্য polyfitপ্রয়োজনীয় যে উদাহরণগুলি আমি খুঁজে পেতে পারি তার সবগুলিই প্রয়োজন arangearangeযদিও তালিকা গ্রহণ করে না accept কোনও তালিকাকে অ্যারেতে কীভাবে রূপান্তর করা যায় সে সম্পর্কে আমি উচ্চ এবং নিম্ন সন্ধান করেছি এবং কিছুই স্পষ্ট বলে মনে হচ্ছে না। আমি কিছু অনুপস্থিত করছি?

অনুসরণ করে, আমি আমার পূর্ণসংখ্যার তালিকাটি ইনপুট হিসাবে কীভাবে ব্যবহার করতে পারি polyfit?

পলিফিটের উদাহরণটি আমি অনুসরণ করছি:

from pylab import * 

x = arange(data) 
y = arange(data) 

m,b = polyfit(x, y, 1) 

plot(x, y, 'yo', x, m*x+b, '--k') 
show() 

regplotএখান থেকে চেষ্টা করুন seaborn: স্ট্যাকওভারফ্লো.
com/a/42263217

উত্তর:


187

arange তালিকা উত্পন্ন করে (ভাল, নমপি অ্যারে); help(np.arange)বিশদ জন্য টাইপ করুন। আপনার এটি বিদ্যমান তালিকায় কল করার দরকার নেই।

>>> x = [1,2,3,4]
>>> y = [3,5,7,9] 
>>> 
>>> m,b = np.polyfit(x, y, 1)
>>> m
2.0000000000000009
>>> b
0.99999999999999833

আমার যুক্ত করা উচিত যে আমি poly1d"এম * x + বি" এবং উচ্চতর অর্ডার সমতুল্য লেখার চেয়ে এখানে ব্যবহার করার প্রবণতা রাখি , সুতরাং আপনার কোডটির আমার সংস্করণটি এরকম কিছু দেখাচ্ছে:

import numpy as np
import matplotlib.pyplot as plt

x = [1,2,3,4]
y = [3,5,7,10] # 10, not 9, so the fit isn't perfect

coef = np.polyfit(x,y,1)
poly1d_fn = np.poly1d(coef) 
# poly1d_fn is now a function which takes in x and returns an estimate for y

plt.plot(x,y, 'yo', x, poly1d_fn(x), '--k')
plt.xlim(0, 5)
plt.ylim(0, 12)

এখানে চিত্র বর্ণনা লিখুন


38

এই কোড:

from scipy.stats import linregress

linregress(x,y) #x and y are arrays or lists.

নিম্নলিখিতগুলির সাথে একটি তালিকা দেয়:

ঢাল: ভাসা
রিগ্রেশন রেখার ঢাল
ভাসা: পথিমধ্যে
রিগ্রেশন রেখার পথিমধ্যে
R-মান: ভাসা
পারস্পরিক সম্পর্কের সহগের
P-মান: ভাসা
একটি হাইপোথিসিস পরীক্ষা যার নাল হাইপোথিসিস যে ঢাল শূন্য জন্য দ্বি-পার্শ্বযুক্ত P-মান
দ্বারা stderr: ভাসা
অনুমানের স্ট্যান্ডার্ড ত্রুটি

উৎস


4
import numpy as np
import matplotlib.pyplot as plt 
from scipy import stats

x = np.array([1.5,2,2.5,3,3.5,4,4.5,5,5.5,6])
y = np.array([10.35,12.3,13,14.0,16,17,18.2,20,20.7,22.5])
gradient, intercept, r_value, p_value, std_err = stats.linregress(x,y)
mn=np.min(x)
mx=np.max(x)
x1=np.linspace(mn,mx,500)
y1=gradient*x1+intercept
plt.plot(x,y,'ob')
plt.plot(x1,y1,'-r')
plt.show()

এটা ব্যবহার কর ..


সমস্যাটি সমাধান করার জন্য এটি কোনও নতুন উপায় যুক্ত করে না - এটি ইতিমধ্যে এই জনপ্রিয় উত্তরে প্রস্তাব দেওয়া হয়েছে ।
মিঃ টি

আপনি কি উত্পন্ন তালিকাটিকে একটি অ্যারে রূপান্তর করতে চান?
আলেয়ানা রেহমান 12

আমি নির্দিষ্ট কিছু চাই না, এটি আমার প্রশ্ন নয়। আমি কেবল বলছি যে ইতিমধ্যে প্রতিষ্ঠিত উত্তরটি পুনরাবৃত্তি করা সত্য নয়, এসও যা খুঁজছেন। লিঙ্কটি পড়ুন, আমি পোস্ট।
মিঃ টি

2
from pylab import * 

import numpy as np
x1 = arange(data) #for example this is a list
y1 = arange(data) #for example this is a list 
x=np.array(x) #this will convert a list in to an array
y=np.array(y)
m,b = polyfit(x, y, 1) 

plot(x, y, 'yo', x, m*x+b, '--k') 
show()

4
আমি দেখছি, আপনি কিছু মন্তব্য লিখেছেন, তবে আপনাকে কয়েকটি ব্যাখ্যাের বাক্য যুক্ত করার কথা বিবেচনা করা উচিত, এটি আপনার উত্তরের মান বাড়িয়ে
তোলে

4
দয়া করে মনে রাখবেন, যখন একটি কোড স্নিপেট করতে তার নিজের উপর একটি দরকারী উত্তর হয় তবে তা সমস্যা কেন এই সমাধান সম্পর্কে ভবিষ্যৎ পাঠকদের জন্য কিছু ভাষ্য ছেড়ে করা বাঞ্ছনীয়। ধন্যবাদ!
এরটি সিডোহাল

4
@ ব্লু-ফিনাক্স ভালভাবেই আমি ভেবেছিলাম লোকেরা এখানে বুদ্ধিমান কিন্তু আমি অনুমান করি পরের বারে আমি তা ব্যাখ্যা করব ..
আলেনা রেহমান

1

আর একটি তাত্ক্ষণিক এবং নোংরা উত্তর হ'ল আপনি নিজের তালিকাটি ব্যবহার করে কেবল অ্যারেতে রূপান্তর করতে পারেন:

import numpy as np
arr = np.asarray(listname)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.