最近看了一些計算機方面關於將logit回歸的資料,發現和統計學上講logit回歸思路還是不一樣的,因為是學統計出身,所以可能更傾向於統計學上關於logit回歸推導的思路。在很多機器學習書上都是通過定義損失函式來得到的,這應該是為了與神經網路保持一致,實際上logit回歸也可以看作神經網路的一種。這是乙個很簡單的模型,演算法也不複雜,但是感覺從極大似然入手能更好的把握,以下的**也是根據這個思路來的,寫得很粗糙。
結果:
print
('----訓練集準確率:%f----'
% self.accucy(trainx, trainy)).
..print
('----測試集準確率:%f----'
% self.accucy(testx, testy))-
---訓練集準確率:1.000000--
----
--測試集準確率:1.000000--
--self.w
array([-
8.25924434
,4.23513343,-
19.57593521
,14.78541044
,14.61989822
])
**:
from pandas import dataframe, series
import numpy as np
from sklearn.model_selection import train_test_split
from pylab import mpl
mpl.rcparams[
'font.sans-serif']=
['fangsong'
]# 指定預設字型
mpl.rcparams[
'axes.unicode_minus']=
false
# 解決儲存影象是負號'-'顯示為方塊的問題
from statsmodels.tools import add_constant
from sklearn import preprocessing
defload_data()
:from sklearn.datasets import load_iris
iris = load_iris(
) train_x = dataframe(iris[
'data'])
.loc[:99
] train_y = dataframe(iris[
'target'])
.loc[:99
] train_x.columns =
['x1'
,'x2'
,'x3'
,'x4'
] train_y.columns =
['y'
]return train_x, train_y
class
logistic()
:def
__init__
(self, trainx, trainy, maxiter)
: self.trainx = add_constant(preprocessing.scale(trainx)
)# self.trainx = add_constant(trainx.to_numpy())
self.trainy = trainy.values
self.maxiter = maxiter
self.w = np.array([1
]* self.trainx.shape[1]
) self.epison =1e-
6def
gradient
(self)
: d1 =1/
(1+np.exp(
-self.trainx.dot(self.w)
.reshape(self.trainx.shape[0]
,1))
) d2 =
-self.trainx*
(self.trainy-d1)
return d2.
sum(axis=0)
deftrain
(self)
:# self.trainx = preprocessing.scale(self.trainx)
itertime =
0 w_old = self.w
w_new = self.w - self.gradient(
)while itertime < self.maxiter and
min(
abs(w_new - w_old)
)> self.epison:
self.w = w_new
itertime +=
1print
(itertime)
defpredict
(self, x)
: x_copy = x.copy(
) x = add_constant(x.to_numpy())
d0 = np.exp(
-x.dot(self.w)
.reshape(x.shape[0]
,1))
y_predict =1/
(1+d0)
y_predict = dataframe(
map(
lambda x:
1if x >
0.5else
0, y_predict)
) y_predict.index = x_copy.index
return y_predict
defaccucy
(self, x, y)
: y_pre = self.predict(x)
ans =
list
(map
(lambda x, y:
1if x == y else
0, y.values, y_pre.values)
)return
sum(ans)
/y.shape[0]
x, y = load_data(
)trainx, testx, trainy, testy = train_test_split(x, y, test_size=
0.3)
maxiter =
1e6self = logistic(trainx, trainy, maxiter)
self.train(
)print
('----訓練集準確率:%f----'
% self.accucy(trainx, trainy)
)print
('----測試集準確率:%f----'
% self.accucy(testx, testy)
)
機器學習 KNN演算法 手寫識別
1.1 簡介 knn演算法即k最近鄰分類演算法,是機器學習的一種。從訓練樣本集中選取k個與測試樣本 距離 最近的樣本,這k個樣本中出現頻率最高的類別作為該測試樣本的類別。1.2 要求 目標 分類未知類別的案例。輸入 待分類未知類別案例專案 測試集 已知類別案例集合d 訓練集 輸出 未知類別案例的可能...
機器學習常見演算法
缺點 貝葉斯公式是乙個後驗概率公式 應用例項 中文的詞串分詞功能,如給 南京市長江大橋 分詞,有兩種可能性 貝葉斯影象識別 首先是視覺系統提取圖形的邊角特徵,然後使用這些特徵自底向上地啟用高層的抽象概念 比如是 e 還是 f 還是等號 然後使用乙個自頂向下的驗證來比較到底哪個概念最佳地解釋了觀察到的...
機器學習入門 常見演算法
乙個故事說明什麼是機器學習 機器學習這個詞是讓人疑惑的,首先它是英文名稱machine learning 簡稱ml 的直譯,在計算界machine一般指計算機。這個名字使用了擬人的手法,說明了這門技術是讓機器 學習 的技術。但是計算機是死的,怎麼可能像人類一樣 學習 呢?關於機器學習的詳細內容 機器...