將原始數據轉換為更有價值和更有意義的特徵,以改善機器學習模型的性能。良好的特徵工程可以提高模型的準確性、降低過度擬合風險
 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.]]
'''