Regresi Linier atau Linear Regression adalah suatu model statistik yang umum dan paling sederhana yang digunakan untuk Machine Learning untuk melakukan prediksi dengan cara supervised learning. Regresi Linier hanya bisa digunakan untuk data yang bersifat interval dan ratio yang biasanya bersifat diskrit dan kontinu, dan merupakan analisis bivariate dan multivariate, simplenya kita bahas bivariate terlebih dahulu, diharapkan juga sudah membaca tentang analisa bivariate terlebih dahulu dimana dijelaskan tentang korelasi antara 2 variabel yang sudah dibahas di Statistika Dasar (Lanjutan).

Regresi Linier melibatkan 2 variabel dimana salah satunya adalah variabel independen (x) dan satu lagi adalah variabel dependen (y). Independen berarti variabel ini sebagai variabel utama yang mungkin akan mempengaruhi nilai variabel kedua (dependen). Dependen berarti nilai variabel ini akan tergantung dari nilai variabel independennya, jika korelasi tinggi maka dependensi juga tinggi.

Contoh membangkitkan data simulasi dengan bilangan random:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x=np.random.randint(250,600,30, dtype=np.int) #independent
y=np.random.normal(x * 0.8 + 10, 35).astype(np.int) #dependent

plt.scatter(x,y)
plt.title("x vs y")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

Output Program:

Contoh Studi:

Terdapat data sample yang didapat dari 10 orang sebagai berikut :

  • Data Tinggi Badan(cm) : 151,174,158,176,138,156,179,163,152,131
  • Data Berat Badan (Kg) : 63, 81, 56, 91, 47, 57, 76, 72, 62, 48

Disini tinggi badan merupakan variabel independen (x), dan berat badan merupakan variabel dependen (y).

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
df = pd.DataFrame([[151,63],[174,81],[158,56],[176,91],[138,47],[156,57],[179,76],[163,72],[152,62],[151,48]])

df.columns = ['x', 'y']
x_train = df['x'].values[:,np.newaxis]
y_train = df['y'].values
lm = LinearRegression()

lm.fit(x_train,y_train) #fase training

print("Coefficient :" + str(lm.coef_))
print("Intercept : " + str(lm.intercept_))
x_test = [[170],[171]] #data yang akan diprediksi
p = lm.predict(x_test) #fase prediksi
print(p) #hasil prediksi

#prepare plot
pb = lm.predict(x_train)
dfc = pd.DataFrame({'x': df['x'],'y':pb})
plt.scatter(df['x'],df['y'])
plt.plot(dfc['x'],dfc['y'],color='red',linewidth=2)
plt.xlabel('Tinggi dalam cm')
plt.ylabel('Berat dalam Kg')
plt.show()

Hasil Output:

Akurasi Model:

Model tipe Regresi Linier tingkat akurasinya dapat dihitung dengan beberapa metode, yang paling umum adalah :

  • R-squared (r²) atau biasa disebut juga Coefficient of Determination, yaitu nilai dari r dikuaratkan, nilai r sudah dibahas diatas.
  • Adjusted R-squared (r²) biasanya digunakan apabila sample kecil dari populasi yang sangat besar.
  • Multiple R-squared (r²) biasanya digunakan untuk multiple correlation multivariate.

Sedangkan untuk pengukur Error menggunakan kaidah semakin tinggi nilai error, maka semakin besar errornya.

Metode Pengukuran Error:

  • Redisual (y actual — y predicted)
  • Standard Error (SE)
  • Root Mean Square Error (RMSE)
  • Mean Absolute Error (MAE), absolute berarti nilai negatif dipositifkan Root Relative Squared Error (RRSE)
  • Relative Absolute Error (RAE), absolute berarti nilai negatif dipositifkan
admin

By admin

4 thoughts on “Regresi Linier dengan Python”
    1. import pandas as pd
      df = pd.read_excel (r'C:\Users\User\Documents\THESIS.xlsx', sheet_name='Sheet2')
      print(df)

      output

      import seaborn as sns # For Data Visualization
      from scipy.stats import norm # for scientific Computing
      import matplotlib.pyplot as plt # For Data Visualization
      plt.figure(figsize=(16,9))
      sns.set()
       
      sns.distplot(df["IQ1"],label="IQ1",)
      sns.distplot(df["IQ2"],label="IQ2",)
      sns.distplot(df["IQ3"],label="IQ3",)
      sns.distplot(df["IQ4"],label="IQ4",)
      sns.distplot(df["IQ5"],label="IQ5",)

      plt.title("Histogram of IQ", fontsize = 16) # for histogram title
      plt.xlabel("Distribusi Frequensi", fontsize = 15)
      plt.legend() # for label

      grafiknya

  1. Bagaimana cara membuat grafik linier programmingnya untuk optimasi dengan fungsi tujuan maximaze (z) = 8.X1 + 9.X2 subject to X1 + X2 <= 80 dan 0.5X1 + X2 = 0

    1. import numpy as np
      from matplotlib import pyplot as plt
      from matplotlib.path import Path
      from matplotlib.patches import PathPatch
      import seaborn as sns

      sns.set_color_codes('deep')

      fig, ax = plt.subplots(figsize=(5, 4))
      x = np.linspace(0, 1000)

      # constraint: x2 &lt;= 100/2 - x1/2
      plt.plot(x, 50/4 - 3*x/4, linewidth=3, label=&#039;batasan 1&#039;)
      plt.fill_between(x, 0, 100/2 - x/2, alpha=0.1)

      # constraint: x2 &lt;= 80 - x1
      plt.plot(x, 30 - 2*x, linewidth=3, label=&#039;batasan 2&#039;)
      plt.fill_between(x, 0, 100 - 2*x, alpha=0.1)

      # non negatif constrain
      plt.plot(np.zeros_like(x), x, linewidth=3, label=&#039;$x$ Sumbu X&#039;)
      plt.plot(x, np.zeros_like(x), linewidth=3, label=&#039;$y$ Sumbu Y&#039;)

      # Plot(x1, x2) pairs
      pairs = [(x, y) for x in np.arange(101)
                      for y in np.arange(101)
                      if (300*x + 400*y) &lt;= 5000
                      and (200*x + 100*y) &lt;= 3000]

      # bagi dua
      x1, x2 = np.hsplit(np.array(pairs), 2)

      # Caculate the objective function at each pair
      z =8*x1 + 9*x2

      # Plot the results
      plt.scatter(x1, x2, c=z, cmap=&#039;jet&#039;, edgecolor=&#039;gray&#039;, alpha=0.5, label=&#039;Titik Profit&#039;, zorder=3)

      # Colorbar
      cb = plt.colorbar()
      cb.set_label(&#039;Keuntungan ($)&#039;)
      #====================================================

      # Labels and stuff
      plt.xlabel(&#039;Paket A&#039;)
      plt.ylabel(&#039;Paket B&#039;)
      plt.xlim(-0.5, 20)
      plt.ylim(-0.5, 20)
      plt.legend()
      fig01 = plt.figure()
      plt.show()

      Grafiknya sebagai berikut:
      grafik optimasi

Leave a Reply

Your email address will not be published. Required fields are marked *