作業屬於課程
機器學習實驗—計算機18級
作業要求鏈結
實驗一 感知器及其應用
學號3180701110
目錄實驗小結
理解感知器演算法原理,能實現感知器演算法;
掌握機器學習演算法的度量指標;
掌握最小二乘法進行引數估計基本原理;
針對特定應用場景及資料,能構建感知器模型並進行**。
安裝pycharm,註冊學生版。
安裝常見的機器學習庫,如scipy、numpy、pandas、matplotlib,sklearn等。
程式設計實現感知器演算法。
熟悉iris資料集,並能使用感知器演算法對該資料集構建模型並應用。
#匯入包
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
%matplotlib inline
# load data
iris = load_iris()
df = pd.dataframe(iris.data, columns=iris.feature_names)
df['label'] = iris.target
#columns是列名(列索引)
df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']//將各個列重新命名
df.label.value_counts()value_counts//計算相同資料出現的次數
結果截圖
#畫散點圖,第一維資料作為x軸,第二維資料作為y軸,['sepal length','sepal width']特徵分布檢視
plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0') //繪製散點圖
plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')
plt.xlabel('sepal length') //給圖加上圖例
data = np.array(df.iloc[:100, [0, 1, -1]])#iloc函式:通過行號來取行資料,讀取資料前100行的第0,1列和最後一列
x, y = data[:,:-1], data[:,-1] //x為sepal length,sepal width y為標籤
y = np.array([1 if i == 1 else -1 for i in y]) //將y的標籤設定為1或者-1
# 定義演算法
# 此處為一元一次線性方程
class model:
def __init__(self):
self.w = np.ones(len(data[0])-1, dtype=np.float32) #初始w的值
self.b = 0 #初始b的值為0
self.l_rate = 0.1 #步長為0.1
# self.data = data
def sign(self, x, w, b):
y = np.dot(x, w) + b #dot進行矩陣的乘法運算,y=w*x+b
return y
#隨機梯度下降法
def fit(self, x_train, y_train):
is_wrong = false #初始假設有誤分點
while not is_wrong:
wrong_count = 0 #誤分點個數初始為0
for d in range(len(x_train)):
x = x_train[d] #取x_train一組及一行資料
y = y_train[d] #取y_train一組及一行資料
if y * self.sign(x, self.w, self.b) <= 0: #為誤分點
self.w = self.w + self.l_rate*np.dot(y, x) #對w和b進行更新
self.b = self.b + self.l_rate*y
wrong_count += 1 #誤分點個數加1
if wrong_count == 0: #誤分點個數為0,演算法結束
is_wrong = true
return 'perceptron model!'
def score(self):
pass
perceptron = model()
perceptron.fit(x, y)//感知機模型
結果截圖
#繪製模型影象,定義一些基本的資訊
x_points = np.linspace(4, 7,10)//x軸的劃分
y_ = -(perceptron.w[0]*x_points + perceptron.b)/perceptron.w[1]
plt.plot(x_points, y_)//繪製模型影象(資料、顏色、圖例等資訊)
plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()
結果截圖
from sklearn.linear_model import perceptron//定義感知機(下面將使用感知機)
clf = perceptron(fit_intercept=false, max_iter=1000, shuffle=false)
clf.fit(x, y)//使用訓練資料擬合
print(clf.coef_)//輸出感知機模型引數
# 截距 constants in decision function.
print(clf.intercept_)//輸出感知機模型引數
x_ponits = np.arange(4, 8) //確定x軸和y軸的值
y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
plt.plot(x_ponits, y_) //確定擬合的影象的具體資訊(資料點,線,大小,粗細顏色等內容)
plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()
結果截圖
本次是關於感知器的實驗,感知機是根據輸入例項的特徵向量對其進行二類分類的線性分類模型。其中,感知機學習的策略是極小化損失函式。通過這次實驗,理解了感知器演算法原理,能實現一些有關感知器演算法。
機器學習 梯度下降實驗
什麼是梯度 梯度 梯度的本意是乙個向量,由函式對每個引數的偏導組成,表示某一函式在該點處的方向導數沿著該方向取得最大值,即函式在該點處沿著該方向變化最快,變化率最大。梯度下降演算法原理 演算法思想 梯度下降是一種非常通用的優化演算法,能夠為大範圍的問題找到最優解。梯度下降的中心思想就是迭代地調整引數...
機器學習基礎演算法一 KNN演算法回歸實驗
前期資料處理 import numpy as np import pandas as pd 增加 的列數行數和每行的寬度以此讓資料集完整表示 pd.set option display.max rows 500 pd.set option display.max columns 500 pd.set...
機器學習一 機器學習概要
回歸 是指把實函式在樣本點附近加以近似的有監督的模式識別問題。對乙個或多個自變數和因變數之間關係進行建模,求解的一種統計方法。分類 是指對於指定的模式進行識別的有監督的模式識別問題。異常檢測 是指尋找輸入樣本ni 1i 1 n中所包含的異常資料的問題。常採用密度估計的方法 正常資料為靠近密度中心的資...