三、線性回歸實驗分析

所有代碼塊都是在Jupyter Notebook下進行調試運行,前后之間都相互關聯。
文中所有代碼塊所涉及到的函數里面的詳細參數均可通過scikit-learn官網API文檔進行查閱,這里我只寫下每行代碼所實現的功能,參數的調整讀者可以多進行試驗調試。多動手!!!

主要內容:
線性回歸方程實現
梯度下降效果
對比不同梯度下降策略
建模曲線分析
過擬合與欠擬合
正則化的作用
提前停止策略

一、線性回歸

Ⅰ、參數直接求解法

前幾章節中也都得出求解的方案,基于最小二乘法直接求解,但這是人工進行求解,為此引入了梯度下降法來訓練機器學習。
回歸方程,也就是最小二乘法求解,確實回歸方程就是迭代更新即可。機器學習中核心的思想是迭代更新。
通過這些公式,我們需要把這個θ求解出來。
在這里插入圖片描述
接下來,我們玩一個有意思的:將隨機生成100個點,然后再進行線性擬合,擬合出一條較好的直線。
以下代碼塊都是基于Jupyter notebook
導包

import numpy as np
import os
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warnings
warnings.filterwarnings('ignore')
np.random.seed(42)
# 隨機生成100個點,隨機構造一個方程y = 4 + 3*x + b
import numpy as np
X = 2*np.random.rand(100,1)#隨機構造數據,選取100個點構建矩陣
y = 4+ 3*X +np.random.randn(100,1)#隨機構造一個方程
# 顯示一下這些點
plt.plot(X,y,'g.')#顏色設定和隨機選取點
plt.xlabel('X_1')
plt.ylabel('y')
plt.axis([0,2,0,15])#x軸0-2和y軸0-15的取值范圍
plt.show()

在這里插入圖片描述

X_b = np.c_[np.ones((100,1)),X]#為了矩陣運算方便,需要再加一列全為1的向量,此時的X_b就是帶有偏置項的矩陣
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)#通過公式求解θ,.T轉置,.dot相乘,inv求逆
theta_best#得到偏置項和權重項
"""
array([[4.21509616],[2.77011339]])
"""
X_new = np.array([[0],[2]])#定義測試數據,兩個點就行,因為兩點就能確定一條直線
X_new_b = np.c_[np.ones((2,1)),X_new]#訓練的時候都加了一列1,測試的時候需要加一列1
y_predict = X_new_b.dot(theta_best)#當前得到的測試數據去乘以權重參數,得到最終的結果,相對于x×θ得到最后的y
y_predict#得出預測的結果值
"""
array([[4.21509616],[9.75532293]])
"""
X_new#當前的值
"""
array([[0],[2]])
"""
#將得到的結果進行繪制
plt.plot(X_new,y_predict,'b--')#由點x通過預測得到的y進行繪制
plt.plot(X,y,'g.')#上面的我們繪制的隨機點
plt.axis([0,2,0,15])
plt.show()

在這里插入圖片描述
最終即可得到通過訓練一百個隨機數,進行擬合得權重參數θ,從而繪制出線性擬合直線。

工具包實現求解權重和偏置參數
sklearn api文檔

from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X,y)
print (lin_reg.coef_)#權重參數
print (lin_reg.intercept_)#偏置參數
#很顯然,跟上述的求解的theta_best一致
"""
[[2.77011339]]
[4.21509616]
"""

Ⅱ、預處理對結果的影響

選擇一個初始值,沿著一個方向梯度按設置的步長走。
在這里插入圖片描述
主要問題包括:
①步長的選取,過大容易發散,過小速度太慢
在這里插入圖片描述
在這里插入圖片描述

②局部最優解和全局最優解選取的問題
在這里插入圖片描述

Ⅲ、標準化

標準化的作用:因為不同的特征取值范圍不同,比如年齡和工資,取值范圍肯定不同,故需要先對數據進行預處理,進行標準化歸一化操作。拿到數據之后基本上都需要做一次標準化操作

(x-μ)/σ,其中μ為均值,x-μ將所有的數據向坐標原點靠攏,以原點為中心對稱。σ為標準差,即數據的浮動范圍,取值范圍浮動大對應的標準差也大,除以σ使得數據取值范圍差不多一致。
綜合而言(x-μ)/σ就是將所有的數據向原點靠攏,以原點為中心對稱,每個數據的取值范圍差不多。

Ⅳ、梯度下降

①,批量梯度下降

批量梯度下降公式:在這里插入圖片描述

eta = 0.1#學習率
n_iterations = 1000#迭代次數
m = 100#樣本個數
theta = np.random.randn(2,1)#對權重參數隨機初始化
for iteration in range(n_iterations):#進行迭代gradients = 2/m* X_b.T.dot(X_b.dot(theta)-y)#每次迭代需要根據公式進行計算一下當前的梯度,這里是批量梯度下降使用了所用的樣本數據theta = theta - eta*gradients#更新參數
theta
"""
array([[4.21509616],[2.77011339]])
"""
X_new_b.dot(theta)#得出預測的結果值
#很顯然,跟上述的求解的theta_best一致
"""
array([[4.21509616],[9.75532293]])
"""

做個實驗:不同學習率α對結果的影響

theta_path_bgd = []#保存theta值用于后續的對比試驗
def plot_gradient_descent(theta,eta,theta_path = None):#theta_path指定是否要保存當前的實驗m = len(X_b)#一共的樣本個數plt.plot(X,y,'b.')#原始樣本數據進行散點圖顯示n_iterations = 1000#迭代次數for iteration in range(n_iterations):#遍歷每次迭代y_predict = X_new_b.dot(theta)#得到當前的預測值plt.plot(X_new,y_predict,'b-')#將預測的線性擬合結果進行繪制gradients = 2/m* X_b.T.dot(X_b.dot(theta)-y)theta = theta - eta*gradientsif theta_path is not None:#不是空值就進行保存theta_path.append(theta)plt.xlabel('X_1')plt.axis([0,2,0,15])#取值范圍plt.title('eta = {}'.format(eta))#把學習率當成圖的名稱
theta = np.random.randn(2,1)#隨機初始化一個θ值,因為需要偏置參數和權重參數故這里是兩個plt.figure(figsize=(10,4))#指定當前圖的大小
plt.subplot(131)#1列3個,首先畫第1個子圖
plot_gradient_descent(theta,eta = 0.02)
plt.subplot(132)#1列3個,畫第2個子圖
plot_gradient_descent(theta,eta = 0.1,theta_path=theta_path_bgd)
plt.subplot(133)#1列3個,畫第3個子圖
plot_gradient_descent(theta,eta = 0.5)
plt.show()#每根線都代表每次迭代得出的結果

在這里插入圖片描述
每條線都代表這每次迭代的結果,很明顯可以看出,學習率越小越慢,但效果好;學習率越大反而效果不好,學跑偏了都。

②,隨機梯度下降
theta_path_sgd=[]#保存theta值用于后續的對比試驗
m = len(X_b)#計算當前所有的樣本
np.random.seed(42)
n_epochs = 50#指定迭代次數t0 = 5#分子 隨便定義
t1 = 50#分母 隨便定義def learning_schedule(t):#學習率進行動態衰減,傳入迭代次數treturn t0/(t1+t)#t0和t1不變,t是迭代次數,隨著迭代次數的增加,整體會變小theta = np.random.randn(2,1)#對theta進行隨機初始化for epoch in range(n_epochs):#每個epoch表示完整的迭代一次所有的樣本for i in range(m):#一個epoch中完成了所有的樣本迭代if epoch < 10 and i<10:y_predict = X_new_b.dot(theta)#拿到預測結果值plt.plot(X_new,y_predict,'r-')#將預測結果值進行展示random_index = np.random.randint(m)#選取隨機的一個樣本xi = X_b[random_index:random_index+1]#取當前樣本的數據yi = y[random_index:random_index+1]#取當前樣本的標簽gradients = 2* xi.T.dot(xi.dot(theta)-yi)#通過隨機梯度下降公式計算梯度eta = learning_schedule(epoch*m+i)#沒每計算完一個梯度需要對學習率進行一次衰減theta = theta-eta*gradients#梯度更新theta_path_sgd.append(theta)#保存當前的theta值plt.plot(X,y,'b.')#繪制原始數據,以藍點的形式展示
plt.axis([0,2,0,15])#橫縱坐標的取值范圍
plt.show()#每次運行都會得到不同的結果

在這里插入圖片描述

③,MiniBatch(小批量)梯度下降
theta_path_mgd=[]#保存theta值用于后續的對比試驗
n_epochs = 50#指定迭代次數
minibatch = 16
theta = np.random.randn(2,1)#對theta進行隨機初始化
#np.random.seed(0)#當然也可以指定隨機種子,保證每次隨機選取,最后的theta值的不變
t0, t1 = 200, 1000#指定衰減策略
def learning_schedule(t):return t0 / (t + t1)
np.random.seed(42)
t = 0
for epoch in range(n_epochs):shuffled_indices = np.random.permutation(m)#將常規的索引打亂順序X_b_shuffled = X_b[shuffled_indices]#將打亂之后的索引回傳到數據中y_shuffled = y[shuffled_indices]#標簽也一樣,需要傳入打亂之后的索引for i in range(0,m,minibatch):#從第0個樣本到第m個樣本,每個的大小為minibatcht+=1#記錄一下迭代次數xi = X_b_shuffled[i:i+minibatch]#從當前指定的位置開始,操作minibatch個yi = y_shuffled[i:i+minibatch]#標簽也一樣gradients = 2/minibatch* xi.T.dot(xi.dot(theta)-yi)#根據minibatch梯度計算公式計算梯度eta = learning_schedule(t)theta = theta-eta*gradientstheta_path_mgd.append(theta)
theta
"""
array([[4.25490684],[2.80388785]])
"""

Ⅴ、三種梯度下降策略對比

#為了方便后續的操作,將保存過的梯度都轉換為array格式
theta_path_bgd = np.array(theta_path_bgd)#批量梯度下降
theta_path_sgd = np.array(theta_path_sgd)#隨機梯度下降
theta_path_mgd = np.array(theta_path_mgd)#MiniBatch梯度下降
plt.figure(figsize=(12,6))#指定畫圖的最終大小
plt.plot(theta_path_sgd[:,0],theta_path_sgd[:,1],'r-s',linewidth=1,label='SGD')#隨機梯度下降,對兩個參數分別展示
plt.plot(theta_path_mgd[:,0],theta_path_mgd[:,1],'g-+',linewidth=2,label='MINIGD')#MiniBatch梯度下降
plt.plot(theta_path_bgd[:,0],theta_path_bgd[:,1],'b-o',linewidth=3,label='BGD')#批量梯度下降
plt.legend(loc='upper left')#label位置進行設置放在左上角
plt.axis([3.5,4.5,2.0,4.0])
plt.show()
"""
藍色為批量梯度下降,直接奔著結果去的,不過很慢
綠色為MiniBatch梯度下降,隨機選取其中的幾個樣本為參數,因為每個樣本都不同,故有點跌宕起伏的感覺(常用,參數常用64、128、256,在速度能容忍的前提下參數越大越好)
紅色為隨機梯度下降,速度很快,跟個小傻子似的,好壞程度完全取決于隨機樣本選取的好壞
"""

在這里插入圖片描述

二、多項式回歸

import numpy as np
import os
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warnings
warnings.filterwarnings('ignore')
np.random.seed(42)
m = 100#樣本數據個數
X = 6*np.random.rand(m,1) - 3#橫坐標的取值范圍[-3,3]
y = 0.5*X**2+X+np.random.randn(m,1)#自己隨便定義一個函數方程 y=0.5* x2 + x + b,其中b為高斯隨機抖動
plt.plot(X,y,'b.')#繪制隨機選取的離散點
plt.xlabel('X_1')#橫坐標名稱
plt.ylabel('y')#縱坐標名稱
plt.axis([-3,3,-5,10])#x、y的取值范圍
plt.show()

在這里插入圖片描述

from sklearn.preprocessing import PolynomialFeatures#導入工具包
poly_features = PolynomialFeatures(degree = 2,include_bias = False)#對函數進行實例化操作
X_poly = poly_features.fit_transform(X)#fit執行所有的計算操作,transform將所有的計算結果進行整合回傳
X[0]#當前的x值
"""
array([2.82919615])
"""
X_poly[0]#[x,x2]
"""
array([2.82919615, 8.00435083])
"""
2.82919615 ** 2#很顯然就是x2值
"""
8.004350855174822
"""
from sklearn.linear_model import LinearRegression#導包。開始訓練
lin_reg = LinearRegression()
lin_reg.fit(X_poly,y)
print (lin_reg.coef_)#權重參數,即回歸方程y=1.1087967x + 0.53435278x2 - 0.03765461
print (lin_reg.intercept_)#與剛開始自定義的方程相比可知擬合效果還是很不錯的
"""
[[1.10879671 0.53435287]]
[-0.03765461]
"""
X_new = np.linspace(-3,3,100).reshape(100,1)#從[-3,3]中選擇100個測試數據
X_new_poly = poly_features.transform(X_new)#按照相同的規則對數據進行轉換
y_new = lin_reg.predict(X_new_poly)#使用剛才得到的回歸方程,得出預測值
plt.plot(X,y,'b.')#先畫隨機測試點
plt.plot(X_new,y_new,'r--',label='prediction')#再通過得出的預測值畫曲線
plt.axis([-3,3,-5,10])#顯示的時候限制一下取值范圍
plt.legend()#加上標簽
plt.show()

在這里插入圖片描述

Ⅰ、根據不同degree值(不同多項式)進行擬合

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler#標準化操作
plt.figure(figsize=(12,6))
for style,width,degree in (('g-',1,100),('b--',1,2),('r-+',1,1)):#顏色、寬度、degree值poly_features = PolynomialFeatures(degree = degree,include_bias = False)#對函數進行實例化操作std = StandardScaler()#標準化 實例化lin_reg = LinearRegression()#線性回歸 實例化polynomial_reg = Pipeline([('poly_features',poly_features),('StandardScaler',std),('lin_reg',lin_reg)])#車間三部曲polynomial_reg.fit(X,y)#傳入數據y_new_2 = polynomial_reg.predict(X_new)#對測試點預測plt.plot(X_new,y_new_2,style,label = 'degree   '+str(degree),linewidth = width)
plt.plot(X,y,'b.')#畫原始數據點
plt.axis([-3,3,-5,10])#顯示的時候限制一下取值范圍
plt.legend()
plt.show()

在這里插入圖片描述
很顯然,綠色函數degree為100,函數很復雜,已經過擬合了,為了盡可能的去滿足所有的點,已經沒必要了。

Ⅱ、不同樣本數量對結果的影響

from sklearn.metrics import mean_squared_error#MSE均方誤差
from sklearn.model_selection import train_test_splitdef plot_learning_curves(model,X,y):X_train, X_val, y_train, y_val = train_test_split(X,y,test_size = 0.2,random_state=100)#測試集20%、訓練集80%、隨機種子為100,也就是每次數據切分都是相同的方式train_errors,val_errors = [],[]#這里沒有使用到測試集,使用了是訓練集和驗證集,保存for m in range(1,len(X_train)):#從1個樣本訓練到使用所有的測試集數據樣本訓練model.fit(X_train[:m],y_train[:m])#訓練y_train_predict = model.predict(X_train[:m])#得出訓練集的結果,依次訓練1個2個直到所有樣本都訓練y_val_predict = model.predict(X_val)#得出驗證集的結果,驗證集選擇全部的,否則不公平train_errors.append(mean_squared_error(y_train[:m],y_train_predict[:m]))#使用m個樣本進行訓練,到時候預測也得是m個val_errors.append(mean_squared_error(y_val,y_val_predict))#使用所有樣本進行驗證,到時候預測個數也得一致plt.plot(np.sqrt(train_errors),'r-+',linewidth = 2,label = 'train_error')plt.plot(np.sqrt(val_errors),'b-',linewidth = 3,label = 'val_error')plt.xlabel('Trainsing set size')plt.ylabel('RMSE')plt.legend()#顯示label
lin_reg = LinearRegression()#線性回歸
plot_learning_curves(lin_reg,X,y)
plt.axis([0,80,0,3.3])#x、y軸取值范圍
plt.show()

在這里插入圖片描述
圖中展示的是error,當訓練集樣本數量較少時,訓練集error較小效果較好,但驗證集validation的error較大,兩者的差值較大,效果不好。
數據量越少,訓練集的效果會越好,但是實際測試效果很一般。實際做模型的時候需要參考測試集和驗證集的效果。

Ⅲ、多項式回歸的過擬合風險

當degree 過大,也就是多項式太高,過擬合太嚴重。

polynomial_reg = Pipeline([('poly_features',PolynomialFeatures(degree = 25,include_bias = False)),('lin_reg',LinearRegression())])
plot_learning_curves(polynomial_reg,X,y)
plt.axis([0,80,0,5])
plt.show()

在這里插入圖片描述
訓練集和驗證集相差太明顯了,可以等價于訓練集為平時的刷題,驗證集為期中期末考試。平常刷題錯誤率很低,最后的期中期末考試卻錯了一塌糊涂,這就是過擬合。

三、正則化

出現過擬合咋辦?正則化專門解決過擬合問題的。
正則化實際上就是對權重參數進行懲罰,讓權重參數盡可能平滑一些,有兩種不同的方法來進行正則化懲罰:
在這里插入圖片描述
θ1和θ2與x相乘結果都一樣,要你你會選擇哪個?小傻子都知道,會選擇θ2,因為θ2考慮了三個元素,而θ1只考慮了第一個元素。
此時正則化公式就出現了:為了就是對每個θ參數進行選取最優

Ⅰ、嶺回歸

在這里插入圖片描述
其中J(θ)為損失函數,當然越小越好。前面的均方誤差是一樣的,后面的為整數,越小越好。帶入公式可得,θ2效果最佳。

from sklearn.linear_model import Ridge
np.random.seed(42)#構建隨機種子
m = 20#指定樣本數量
X = 3*np.random.rand(m,1)#x的取值范圍[0,3]之間選取20個點就行了
y = 0.5 * X +np.random.randn(m,1)/1.5 +1#自己定義一個函數方程
X_new = np.linspace(0,3,100).reshape(100,1)#測試數據def plot_model(model_calss,polynomial,alphas,**model_kargs):for alpha,style in zip(alphas,('b-','g--','r:')):#選取多個α值model = model_calss(alpha,**model_kargs)#對model實例化if polynomial:model = Pipeline([('poly_features',PolynomialFeatures(degree = 10,include_bias = False)),('StandardScaler',StandardScaler()),('lin_reg',model)])model.fit(X,y)y_new_regul = model.predict(X_new)#預測一下當前得到的結果lw = 2 if alpha > 0 else 1#指定線條寬度plt.plot(X_new,y_new_regul,style,linewidth = lw,label = 'alpha = {}'.format(alpha))plt.plot(X,y,'b.',linewidth =3)plt.legend()#顯示標簽plt.figure(figsize=(14,6))#設置一個大圖展示
plt.subplot(121)#兩個子圖的第一個
plot_model(Ridge,polynomial=False,alphas = (0,10,100))#不做多項式擬合操作  α的取值表示正則化的程度
plt.subplot(122)#兩個子圖的第二個
plot_model(Ridge,polynomial=True,alphas = (0,10**-5,1))#做多項式擬合操作   α的取值表示正則化的程度
plt.show()

在這里插入圖片描述

Ⅱ、lasso

在這里插入圖片描述

from sklearn.linear_model import Lassoplt.figure(figsize=(14,6))
plt.subplot(121)
plot_model(Lasso,polynomial=False,alphas = (0,0.1,1))
plt.subplot(122)
plot_model(Lasso,polynomial=True,alphas = (0,10**-1,1))
plt.show()

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377917.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377917.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 236. 二叉樹的最近公共祖先 思考分析

目錄題目思考分析改進本文章代碼思路來源于公眾號【代碼隨想錄】題目 給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為&#xff1a;“對于有根樹 T 的兩個結點 p、q&#xff0c;最近公共祖先表示為一個結點 x&#xff0c;滿足 x 是 p、…

輕輕松松給PCB板添加LOGO

在 PCB 圖中放置漢字或圖形的方法&#xff1a;A、文字——> 圖片——> PCB 圖——> 復制到自己作品中B、圖片——> PCB 圖——> 復制到自己作品中1、首先準備好“BMP”格式的圖片&#xff0c;在圖片中依靠顏色分辨圖層&#xff0c;所以最好準備“單色黑白”圖。…

java bitset_Java BitSet clone()方法及示例

java bitsetBitSet類clone()方法 (BitSet Class clone() method) clone() method is available in java.util package. clone()方法在java.util包中可用。 clone() method is used to clone this Bitset or in other words, this method is used to create a Bitset that is si…

小技巧

//屏蔽下拉框的某一個選項 <disabled"disable">... 1 <html>2 <body>3 4 <select>5 <option>Volvo</option>6 <option>Saab</option>7 <option disabled"disabled">Mercedes</option>…

jquery中text val html attr的差別

html和innerHTMl是一樣的&#xff0c;可以獲得和設置html標簽文本如&#xff1a;設置值&#xff1a;$("p").html("<span stylefont-size:13px;color:red>HTML標簽文本</span>"); 獲得值&#xff1a;$("p").html(); text和innerText是…

leetcode 235. 二叉搜索樹的最近公共祖先 思考分析

目錄題目思考迭代法題目 給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為&#xff1a;“對于有根樹 T 的兩個結點 p、q&#xff0c;最近公共祖先表示為一個結點 x&#xff0c;滿足 x 是 p、q 的祖先且 x 的深度盡可能大&#xff0…

四、邏輯回歸

邏輯回歸logistic_regression(LR)其實是分類算法&#xff0c;而不是回歸算法。 回歸算法得到的是一個數&#xff0c;分類算法得到的是幾個不同的類別。 邏輯回歸就是通過函數將值轉換為0-1之間&#xff0c;形成概率問題&#xff0c;從而實現了不同類別的分類。 Sigmoid 函數 …

db,dbms,dba_DBMS中的數據庫管理員(DBA)

db,dbms,dba數據庫管理員(DBA) (Database Administrator (DBA)) To use the Database Management System, it is necessary to have central control over data and programs together in order to access such data. A person who has central control over such system is re…

運算符優先級

轉載于:https://www.cnblogs.com/c-cloud/p/3280911.html

五、邏輯回歸實驗分析

所有代碼塊都是在Jupyter Notebook下進行調試運行&#xff0c;前后之間都相互關聯。 文中所有代碼塊所涉及到的函數里面的詳細參數均可通過scikit-learn官網API文檔進行查閱&#xff0c;這里我只寫下每行代碼所實現的功能&#xff0c;參數的調整讀者可以多進行試驗調試。多動手…

二叉搜索樹的插入、刪除、修剪、構造操作(leetcode701、450、669、108)

目錄1、leetcode 701. 二叉搜索樹中的插入操作1、題目2、遞歸法3、迭代法2、leetcode 450. 二叉搜索樹中的插入操作1、題目2、思路遞歸法3、迭代法4、刪除結點的兩個方法以及注意點3、leetcode 669. 修剪二叉搜索樹1、題目2、思考與遞歸3、迭代法4、leetcode 108. 將有序數組轉…

Memcached查看和清理

1.一種telnet localhost 11211 #登陸stats #查看狀態flush_all #清理quit #退出2.又學到一個:echo flush_all | nc localhost 112113.1、數據存儲(假設key為test,value為12345) printf "set test 0 1 5\r\n12345\r\n" | nc localhost 11211STORED2.數據取回(假設key為…

模擬退火算法解決np_P和NP問題與解決方案| 演算法

模擬退火算法解決npP問題 (P Problems) P is the set of all the decision problems solvable by deterministic algorithms in polynomial time. P是多項式時間內確定性算法可解決的所有決策問題的集合。 NP問題 (NP Problems) NP is the set of all the decision problems t…

POJ2251Dungeon Master

http://poj.org/problem?id2251 題意 &#xff1a; 就是迷宮升級版&#xff0c;從以前的一個矩陣也就是一層&#xff0c;變為現在的L層&#xff0c;" . "是可以走&#xff0c;但是“#”不可以走&#xff0c;從S走到E&#xff0c;求最短的路徑&#xff0c;若是找不到…

六、聚類算法

一、聚類概念 1&#xff0c;通俗易懂而言&#xff0c;聚類主要運用于無監督學習中&#xff0c;也就是將沒有標簽的東西如何分為幾堆兒。 2&#xff0c;無監督學習即沒有標簽&#xff0c;不知道這些玩意到底是啥。當然&#xff0c;有監督學習就是由標簽&#xff0c;我們是提前知…

Apache服務器通過.htaccess文件設置防盜鏈

用戶經常面對的一個問題就是服務器的流量問題&#xff0c;而站點文件被盜鏈是其中最為主要的部分。所謂盜鏈&#xff0c;是指其他網站直接鏈接我們網站上的文件&#xff0c;一般來 說&#xff0c;盜鏈的對象大多為很耗帶寬的大體積文件&#xff0c;如圖片、視頻等。這樣造成的后…

【C++grammar】string類和array類

目錄1、C11的string類1、創建 string 對象2、追加字符串append函數3、為字符串賦值assign函數4、at, clear, erase, and empty函數5、比較字符串compare()6、獲取子串at() 、substr()函數7、搜索字符串find()8、插入和替換字符串insert() 、replace()9、字符串運算符10、string…

六、聚類算法實戰

所有代碼塊都是在Jupyter Notebook下進行調試運行&#xff0c;前后之間都相互關聯。 文中所有代碼塊所涉及到的函數里面的詳細參數均可通過scikit-learn官網API文檔進行查閱&#xff0c;這里我只寫下每行代碼所實現的功能&#xff0c;參數的調整讀者可以多進行試驗調試。多動手…

超圖軟件試用許可操作步驟_軟件中的操作步驟

超圖軟件試用許可操作步驟The software comprises of three things: Program code, Documentation, and the Operating Procedures. The Program code is the entire software code. The Documentation is produced while the development of the software itself for the time…

mysql 2013錯誤

參考資料&#xff1a; 自由呼吸的世界-mysql 2013錯誤解決 windows下mysql日志文件開啟 今天&#xff0c;莫名其妙的來了個mysql 2013錯誤&#xff0c;導致無法登陸mysql gui工具&#xff0c;而且dos也進不去&#xff0c;提示ping 127.0.0.1,百度google后&#xff1a; 這是在使…