將原始數據轉換為更有價值和更有意義的特徵,以改善機器學習模型的性能。良好的特徵工程可以提高模型的準確性、降低過度擬合風險
import numpy as np
data = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
# 最小值和最大值
x_min = data.min()
x_max = data.max()
print(x_min)
print(x_max)
NX = data - x_min
NY = x_max - x_min
print(NX)
print(NY)
# 進行線性函數正規化
normalized_data = (NX) / (NY)
print(normalized_data)
'''
1.0
5.0
[0. 1. 2. 3. 4.]
4.0
[0. 0.25 0.5 0.75 1. ]
'''
import numpy as np
data = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
# 計算平均值和標準差
mean = data.mean()
std = data.std()
print(mean)
print(std)
N = data - mean
# 進行標準化值正規化
normalized_data = (N) / std
print(normalized_data)
'''
3.0
1.4142135623730951
[-1.41421356 -0.70710678 0. 0.70710678 1.41421356]
'''
1.猜值
2.切線
y-y0/x-x0=m
=> x = x0+y-y0/m
=>(y=0)x=x0-y0/m
=>(m=f’(x))x=x0-y0/f’(x)
import numpy as np
def newton_method(f, f_prime, x0=None, tol=1e-6, max_iter=100):
"""
牛頓法求解函數的根
Parameters:
- f: 要求解根的函數
- f_prime: 函數的一階導數
- x0: 初始猜測值(可選),如果未提供,將使用隨機初始值
- tol: 容忍誤差,當函數值小於tol時停止迭代
- max_iter: 最大迭代次數
Returns:
- root: 求解得到的根
"""
if x0 is None:
x0 = np.random.rand() # 使用隨機初始值
x = x0
for _ in range(max_iter):
fx = f(x)
fpx = f_prime(x)
if abs(fx) < tol:
return x
x = x - fx / fpx
return x
# 定義要求解根的函數及其一階導數
def function(x):
return x**3 - 2*x - 5
def derivative(x):
return 3*x**2 - 2
# 使用牛頓法求解根,可以自由輸入初始猜測值
initial_guess = float(input("請輸入初始猜值: "))
root = newton_method(function, derivative, initial_guess)
print("牛頓法求解的根:", root)
import numpy as np
# 定義損失函數(這裡使用一個簡單的二次函數)
def loss_function(x):
return x**2 + 2*x + 1
# 定義損失函數的梯度
def gradient(x):
return 2*x + 2
# 初始化參數
learning_rate = 0.1
num_iterations = 100
# 使用者輸入初始參數值
x = float(input("請輸入初始參數值: "))
# 使用SGD更新參數
for _ in range(num_iterations):
gradient_x = gradient(x)
x = x - learning_rate * gradient_x
# 輸出最終估計的參數值
print("SGD估計的參數值:", x)
高維度常見問題
降維
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures
data = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# 創建多項式特徵,例如 A^2, AB, B^2
poly = PolynomialFeatures(degree=2, include_bias=False)
result = poly.fit_transform(data)
print(result)
'''
[[ 1. 4. 1. 4. 16.]
[ 2. 5. 4. 10. 25.]
[ 3. 6. 9. 18. 36.]]
'''