基礎(chǔ)的LogisticRegression的Python代碼實(shí)現(xiàn)
邏輯回歸是一種用于解決分類問題的機(jī)器學(xué)習(xí)算法。盡管它的名字中包含「回歸」一詞,但邏輯回歸實(shí)際上是一種分類算法,常用于預(yù)測(cè)二元輸出變量的概率。
邏輯回歸的基本原理是基于線性回歸的概念,但它使用了一個(gè)稱為「邏輯函數(shù)」或「sigmoid函數(shù)」的特殊函數(shù)來將預(yù)測(cè)結(jié)果轉(zhuǎn)換為概率值。這個(gè)函數(shù)的輸出范圍在0到1之間,可以表示為概率或概率的對(duì)數(shù)比值。邏輯回歸通過學(xué)習(xí)輸入特征與輸出標(biāo)簽之間的關(guān)系來建立一個(gè)模型。模型使用特征的線性組合,并通過邏輯函數(shù)將結(jié)果映射到概率值。訓(xùn)練過程中,使用最大似然估計(jì)或梯度下降等優(yōu)化算法來調(diào)整模型參數(shù),使得模型能夠更好地?cái)M合訓(xùn)練數(shù)據(jù),并能夠準(zhǔn)確地預(yù)測(cè)新的未知樣本的類別。邏輯回歸廣泛應(yīng)用于許多領(lǐng)域,包括醫(yī)學(xué)、社會(huì)科學(xué)、金融等。它可以用于預(yù)測(cè)疾病的發(fā)生與否、判斷客戶是否會(huì)購買某個(gè)產(chǎn)品、檢測(cè)信用卡欺詐行為等二元分類問題。以下代碼將根據(jù)提供的 2 份 E xcel 文件中的坐標(biāo)點(diǎn),找到一個(gè)能夠劃分兩個(gè)數(shù)據(jù)集的函數(shù)曲線,同時(shí)生成圖像,并且可以根據(jù)生成模型預(yù)測(cè)輸入的坐標(biāo)點(diǎn)屬于 Excel-0 還是 Excel-1。
邏輯回歸的基本原理是基于線性回歸的概念,但它使用了一個(gè)稱為「邏輯函數(shù)」或「sigmoid函數(shù)」的特殊函數(shù)來將預(yù)測(cè)結(jié)果轉(zhuǎn)換為概率值。這個(gè)函數(shù)的輸出范圍在0到1之間,可以表示為概率或概率的對(duì)數(shù)比值。邏輯回歸通過學(xué)習(xí)輸入特征與輸出標(biāo)簽之間的關(guān)系來建立一個(gè)模型。模型使用特征的線性組合,并通過邏輯函數(shù)將結(jié)果映射到概率值。訓(xùn)練過程中,使用最大似然估計(jì)或梯度下降等優(yōu)化算法來調(diào)整模型參數(shù),使得模型能夠更好地?cái)M合訓(xùn)練數(shù)據(jù),并能夠準(zhǔn)確地預(yù)測(cè)新的未知樣本的類別。邏輯回歸廣泛應(yīng)用于許多領(lǐng)域,包括醫(yī)學(xué)、社會(huì)科學(xué)、金融等。它可以用于預(yù)測(cè)疾病的發(fā)生與否、判斷客戶是否會(huì)購買某個(gè)產(chǎn)品、檢測(cè)信用卡欺詐行為等二元分類問題。以下代碼將根據(jù)提供的 2 份 E xcel 文件中的坐標(biāo)點(diǎn),找到一個(gè)能夠劃分兩個(gè)數(shù)據(jù)集的函數(shù)曲線,同時(shí)生成圖像,并且可以根據(jù)生成模型預(yù)測(cè)輸入的坐標(biāo)點(diǎn)屬于 Excel-0 還是 Excel-1。
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.linear_model import LogisticRegression
# 讀取 Excel 文件(excel的第一列為橫坐標(biāo),第二列為縱坐標(biāo))df_0 = pd.read_excel('./Excel-0.xlsx')df_1 = pd.read_excel('./Excel-1.xlsx')
# 提取第一列和第二列數(shù)據(jù)x_0_values = df_0.iloc[:, 0].tolist()y_0_values = df_0.iloc[:, 1].tolist()x_1_values = df_1.iloc[:, 0].tolist()y_1_values = df_1.iloc[:, 1].tolist()
# 組合為指定形式的列表data_0 = [[x, y] for x, y in zip(x_0_values, y_0_values)]data_1 = [[x, y] for x, y in zip(x_1_values, y_1_values)]
# 定義兩組數(shù)據(jù)的 x 和 y 坐標(biāo)data_x = np.array(data_0 + data_1)data_y = np.zeros(244, dtype=int)data_y[120:] = 1
# 創(chuàng)建邏輯回歸模型對(duì)象model = LogisticRegression()
# 擬合模型model.fit(data_x, data_y)
# 創(chuàng)建新的橫坐標(biāo)數(shù)據(jù)new_data = np.array([[3, 3], [6, 6]])
# 使用模型進(jìn)行預(yù)測(cè)分類predictions = model.predict(new_data)
# 打印預(yù)測(cè)結(jié)果for data, pred in zip(new_data, predictions):print(f"數(shù)據(jù)點(diǎn) {data} 的預(yù)測(cè)類別為: {pred}")
coefficients = model.coef_intercept = model.intercept_print("w0:", intercept)print("w1,w2:", coefficients)
# Define the range of the grid pointsx_min, x_max = data_x[:, 0].min() - 1, data_x[:, 0].max() + 1y_min, y_max = data_x[:, 1].min() - 1, data_x[:, 1].max() + 1h = 0.02 # grid step size
# Generate the prediction resultsxx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))Z = model.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)
# Plot the classifier graphplt.figure()plt.contourf(xx, yy, Z, alpha=0.8)plt.scatter(data_x[:, 0], data_x[:, 1], c=data_y, edgecolors='k')plt.xlabel('X')plt.ylabel('Y')plt.title('Logistic Regression Classifier')plt.savefig('my_plot.svg', format='svg')plt.show()
評(píng)論
圖片
表情
