Saya diminta untuk menulis program Regresi Logistik menggunakan langkah-langkah berikut.

  1. Muat biopsi dataset R dari paket MASS.
  2. Tangkap data sebagai kerangka data panda.
  3. Ubah nama kelas nama kolom menjadi Kelas.
  4. Ubah nilai kolom Kelas jinak dan ganas menjadi '0' dan '1' masing-masing.
  5. Membangun model regresi logistik dengan variabel bebas V1 dan variabel terikat Kelas.
  6. Sesuaikan model dengan data, dan tampilkan nilai pseudo R-kuadrat

Saya sudah mencoba mengubah nilainya tetapi saya tidak yakin apa yang harus dilakukan. Juga, saya seorang pemula di Statistik menggunakan Python.

import statsmodels.api as sa
import statsmodels.formula.api as sfa
biopsy = sa.datasets.get_rdataset("biopsy","MASS")
biopsy_data = biopsy.data
biopsy_data.rename(columns={"class":"Class"})
biopsy_data.Class = biopsy_data.Class.map({"benign":0,"malignant":1})
log_mod1 = sfa.logit("V1~Class",biopsy_data)
log_res1 = log_mod1.fit()
print(log_res1.summary())

Saya mengharapkan tabel nilai tetapi hasilnya adalah a

ValueError("endog must be in the unit interval.")
2
Megan RMS 21 September 2019, 15:23

2 jawaban

Jawaban Terbaik

Ada beberapa langkah pra-pemrosesan yang perlu Anda lakukan, mereka memberi tahu Anda bahwa Anda harus berada dalam interval satuan sehingga antara 0 dan 1.

Yang dapat Anda lakukan adalah penskalaan fitur dengan melakukan : X - Xmin/ Xmax - Xmin

Di sini modifikasi yang seharusnya berfungsi:

import statsmodels.api as sa
import statsmodels.formula.api as sfa
biopsy = sa.datasets.get_rdataset("biopsy","MASS")
biopsy_data = biopsy.data
biopsy_data.rename(columns={"class":"Class"},inplace=True)
biopsy_data.Class = biopsy_data.Class.map({"benign":0,"malignant":1})
biopsy_data["V1"] = np.divide(biopsy_data["V1"] - biopsy_data["V1"].min(), biopsy_data["V1"].max() - biopsy_data["V1"].min())
log_mod1 = sfa.logit("V1~Class",biopsy_data)
log_res1 = log_mod1.fit()
print(log_res1.summary())

Sebelum memanggil di sfa.logit() saya telah membuat pra-pemrosesan variabel independen yang ingin Anda gunakan (V1 di sini).

2
Rickantonais 21 September 2019, 13:26

Perubahan:

log_mod1 = sfa.logit("V1~Class",biopsy_data)

Untuk:

log_mod1 = sfa.logit("Class~V1",biopsy_data)

Ini bekerja.

0
סטנלי גרונן 19 Juni 2020, 05:32