sklearn 라이브러리 -k 최근 접 이웃 및 선형 모델의지도 연습

1. 데이터 세트를 처리하는 방법은 무엇입니까?

from sklearn.dataset import load_iris  # 加载鸢尾花数据集 

scikit-learn을 사용할 때 데이터는 일반적으로 대문자 X로 표시되고 레이블은 소문자 y로 표시됩니다.

scikit-learn의 model_selection의 train_test_split 함수는 데이터 세트를 섞고 분할 할 수 있습니다.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( 
    iris_dataset['data'], iris_dataset['target'], random_state=0) 
# 在对数据进行拆分之前,train_test_split 函数利用伪随机数生成器将数据集打乱
# random_state 参数指定了随机数生成器的种子。这样函数输出就是固定不变的

데이터를 확인하는 가장 좋은 방법 중 하나는 시각화하는 것입니다. 한 가지 시각화 방법은 산점도를 그리는 것입니다. pandas에는 산점도 행렬을 그리는 데 사용되는 scatter_matrix () 함수가 있습니다. 행렬의 대각선은 각 특성의 히스토그램입니다.

# 利用DataFrame创建散点图矩阵,按y_train着色, 现在函数名为pd.plotting.scatter_matrix()
grr = pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o', hist_kwds={
    
    'bins': 20}, s=60, alpha=.8)

산점도 행렬 :
여기에 사진 설명 삽입

2. 알고리즘을 호출하는 방법?

scikit-learn의 모든 기계 학습 모델은 Estimator 클래스라고하는 자체 클래스에서 구현됩니다. 이 모델을 사용하기 전에이 클래스를 객체로 인스턴스화해야합니다.

예 : k- 최근 접 이웃 분류 알고리즘은 neighbors 모듈의 KNeighborsClassifier 클래스에서 구현됩니다.

from sklearn.neighbors import KNeighborsClassifier  # 加载实现KNN算法的类
knn = KNeighborsClassifier(n_neighbors=1)  # 创建一个实例对象,并初始化
knn.fit(X_train, y_train)  
# 调用knn对象的fit方法,fit方法返回的是knn对象本身并做原处修改,得到了分类器的字符串表示。
y_pred = knn.predict(X_test) # 调用knn对象的predict方法,对验证集进行预测。
score = knn.score(X_test, y_test) # 调用knn对象的score方法,计算测试集的精度
np.mean(y_pred == y_test) # 另外一种计算测试集精度的方法

3.지도 학습 : 분류 및 회귀

지도 머신 러닝 문제에는 분류 (분류)와 회귀 (회귀)라는 두 가지 주요 유형이 있습니다.

분류 문제에서 가능한 다양성을 클래스라고하고 알려진 데이터가있는 다양성을 레이블이라고합니다.

분류 작업은 때때로 다음과 같이 나눌 수 있습니다.

  • 두 분류 (이진 분류, 두 범주를 구별하는 특별한 경우)

    일반적으로 범주 중 하나를 포지티브 클래스라고하고 다른 범주를 네거티브 클래스라고합니다.

  • 다중 분류 (다중 분류, 둘 이상의 범주 구분)

회귀 작업의 목표는 연속 값을 예측하는 것이며 프로그래밍 용어는 부동 소수점 수 (부동 소수점 수), 수학적 용어는 실수 (실수)라고합니다.

분류 작업과 회귀 작업을 구별하는 간단한 방법은 다음과 같은 질문을하는 것입니다. 출력에 연속성이 있습니까?

사용 가능한 정보의 양에 비해 너무 복잡한 모델을 구성하는 것을 과적 합이라고합니다.

너무 단순한 모델을 선택하는 것을 과소 적합이라고합니다.

지도 학습 알고리즘 개요 :

연산 요약하자면
가장 가까운 이웃 작은 데이터 세트에 적합하며 좋은 벤치 마크 모델이며 설명하기 쉽습니다.
선형 모델 매우 신뢰할 수있는 선호 알고리즘으로 매우 큰 데이터 세트에 적합하며 고차원 데이터에도 적합합니다.
나이브 베이 즈 분류 문제에만 적용됩니다. 선형 모델보다 빠르며 매우 큰 데이터 세트와 고차원 데이터에 적합합니다. 정확도는 일반적으로 선형 모델보다 낮습니다.
의사 결정 트리 빠르고, 데이터 확장이 필요하지 않으며, 시각화 할 수 있으며 설명하기 쉽습니다.
랜덤 포레스트 거의 항상 단일 의사 결정 트리보다 낫고 매우 강력하고 강력합니다. 데이터 스케일링이 필요하지 않습니다. 고차원 희소 데이터에는 적합하지 않습니다.
그라디언트 부스팅 의사 결정 트리 정확도는 일반적으로 랜덤 포레스트보다 약간 높습니다. 랜덤 포레스트에 비해 훈련 속도는 더 느리지 만 예측 속도는 더 빠르며 메모리가 덜 필요합니다. 랜덤 포레스트보다 더 많은 매개 변수 조정이 필요합니다.
서포트 벡터 머신 기능 의미가 유사한 중간 크기의 데이터 세트에 강력합니다. 데이터 확장이 필요하며 매개 변수에 민감합니다.
신경망 특히 대규모 데이터 세트의 경우 매우 복잡한 모델을 작성할 수 있습니다. 데이터 스케일링 및 매개 변수 선택에 민감합니다.

넷째, 주요 알고리즘

4.1 사용 된 데이터 세트
from sklearn.datasets import load_breast_cancer  # 威斯康星州乳腺癌数据集(用于分类数据集)
from sklearn.datasets import load_boston  # 波士顿房价数据集(用于回归数据集)

4.2k 최근 접 이웃

k-NN 알고리즘은 가장 간단한 기계 학습 알고리즘이라고 할 수 있습니다.

from sklearn.neighbors import KNeighborsClassifier  # 用于分类的k近邻训练器
clf = KNeighborsClassifier(n_neighbors = 3)  
from sklearn.neighbors import KNeighborsRegressor  # 用于回归的k近邻训练器
reg = KNeighborsRegressor(n_neighbors=3)  
  • 분류를위한 k- 최근 접 이웃 알고리즘
# 进行数据集的导入和拆分
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=66)
# 使用k近邻分类器训练邻居个数为1-10的模型,并计算准确率accuracy
from sklearn.neighbors import KNeighborsClassifier
training_accuracy = []
test_accuracy = []
neighbors_settings = range(1,11)
for n_neighbors in neighbors_settings:
    clf = KNeighborsClassifier(n_neighbors = n_neighbors)
    clf.fit(X_train, y_train)
    training_accuracy.append(clf.score(X_train, y_train))
    test_accuracy.append(clf.score(X_test, y_test))
plt.plot(neighbors_settings, training_accuracy, label="training accurcay")
plt.plot(neighbors_settings, test_accuracy, label="test accurcay")
plt.xlabel("n_neighbors")
plt.ylabel("Accuracy")
plt.legend()

정확성:
여기에 사진 설명 삽입

  • 회귀를위한 k- 최근 접 이웃 알고리즘

단일 이웃을 사용한 예측 결과는 가장 가까운 이웃의 목표 값입니다. 여러 이웃이 사용되는 경우 예측 결과는 이러한 이웃의 평균입니다. 특정 코드는 분류와 일치합니다.

회귀 문제의 경우 평가 모델의 점수 방법은 R 2 점수를 반환합니다 . R 2 점수는 0과 1 사이에있는 회귀 모델 예측의 장점을 측정하는 결정 계수라고도합니다. 1과 같은 R2는 완벽한 예측에 해당하고 0과 같은 R2는 상수 모델에 해당합니다.

  • 요약하자면

(1) 매개 변수 : 이웃 수 및 데이터 포인트 간의 거리 측정 방법

(2) 장점 : 이해하기 쉽고 과도한 조정없이 좋은 성능을 얻을 수있는 좋은 벤치 마크 방법입니다.

(3) 단점 : 예측 속도가 느리고 기능이 많은 학습 세트, 특히 희소 데이터 세트에 적합하지 않습니다.


4.3 선형 모델

선형 모델은 입력 특성의 선형 함수를 사용하여 예측합니다.

from sklearn.linear_model import LinearRegression  # 线性回归的训练器
lr = LinearRegression()
from sklearn.linear_model import Ridge  # 岭回归的训练器
ridge = Ridge(alpha=1)  
# alpha参数指定简单性和训练集性能二者对于模型的重要程度,alpha 的最佳设定值取决于具体数据集。
# 一般来说,alpha值越小模型越复杂,正则化越弱。
from sklearn.linear_model import Lasso  # Lasso回归的训练器
ridge = Ridge(alpha=0.01, max_iter=100000)
from sklearn.linear_model import LogisticRegression  # Logistic回归的分类器
logreg = LogisticRegression(C=1, penalty="l2")  
# 参数C决定正则化强度的权衡参数,越大对应的正则化越弱;参数penalty决定选取正则化项类别
from sklearn.svm import LinearSVC   # 线性SVM的分类器,SVC代表支持向量分类器

선형 모델 알고리즘의 차이점 :

  • 계수와 절편의 특정 조합이 훈련 데이터에 얼마나 잘 맞는지 측정합니다.
  • 정규화 사용 여부 및 사용할 정규화 방법.

  1. 회귀를위한 선형 모델

회귀에 사용되는 선형 모델의 경우 출력 ŷ 은 직선, 평면 또는 초평면 (고차원 데이터 세트의 경우) 인 피쳐의 선형 함수입니다. 단일 피쳐의 예측 결과는 직선이고 두 피쳐는 평면 또는 더 높은 차원의 하이퍼 플레인 (즉, 더 많은 피쳐)입니다.

특징의 수가 훈련 데이터 포인트의 수보다 크면 모든 대상 y 를 선형 함수로 완벽하게 맞출 수 있습니다 (훈련 세트에서).

(훈련 세트의 포인트가 모두 회귀 곡선에 있음을 이해할 수 있다고 생각합니다!)

  • 선형 회귀 (일반 최소 제곱 (OLS)라고도 함)

선형 회귀 또는 일반적인 최소 제곱 법은 회귀 문제에 대한 가장 간단하고 가장 고전적인 선형 방법입니다.

선형 회귀는 훈련 세트 예측 값과 실제 회귀 목표 값 y 사이의 평균 제곱 오차 최소화하기 위해 매개 변수 wb를 찾습니다 .

평균 제곱 오차는 예측 값과 실제 값 사이의 차이 제곱의 합을 샘플 수로 나눈 값입니다.

# 线性回归过程
from sklearn.linear_model import LinearRegression
X, y = mglearn.datasets.make_wave(n_samples =60)
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=42)
lr = LinearRegression().fit(X_train, y_train)  # 创建线性回归分类器实例对象并训练
lr.coef_  # 该属性保存w,即权重或者系数
lr.intercept_  # 该属性保存b,即偏移或截距
lr.score(X_train, y_train)  # 计算训练集性能
lr.score(X_test, y_test)  # 计算测试集性能

매개 변수 wNumPy 배열 인 coef_ 속성에 저장 되며 각 요소는 입력 특성에 해당합니다.

매개 변수 b부동 소수점 숫자 인 intercept_ 속성에 저장됩니다 .

scikit-learn은 항상 밑줄로 끝나는 속성에 훈련 데이터에서 파생 된 값을 저장합니다. 이는 사용자가 설정 한 매개 변수와 구별하기위한 것입니다.


  • 능선 회귀

능선 회귀 분석에서 계수 ( w )를 선택하면 훈련 데이터에 대한 좋은 예측 결과를 얻을 수있을뿐만 아니라 추가 제약 조건에도 적합해야합니다. 또한 계수가 가능한 한 작기를 바랍니다. 즉, w의 모든 요소는 0에 가까워 야합니다.

능선 회귀의 제약은 정규화의 한 예입니다. 정규화는 과적 합을 피하기 위해 모델에 명시적인 제약을 만드는 것을 의미합니다. 이러한 유형의 능선 회귀를 L2 정규화라고합니다.

from sklearn.linear_model import Ridge
ridge = Ridge(alpha=1)  

능선 회귀 및 선형 회귀 성능 비교 :
여기에 사진 설명 삽입
학습 데이터가 충분하면 정규화가 덜 중요 해지고 능선 회귀와 선형 회귀는 동일한 성능을 갖습니다.


  • 올가미

올가미는 L1 정규화를 사용합니다. L1 정규화의 결과는 올가미를 사용할 때 일부 계수가 정확히 0이라는 것입니다. 이것은 일부 기능이 모델에서 완전히 무시된다는 것을 보여줍니다. 이것은 자동화 된 기능 선택으로 볼 수 있습니다.

from sklearn.linear_model import Lasso
ridge = Ridge(alpha=0.01, max_iter=100000) 

능선 회귀 및 올가미 회귀 선택 :

실제로, 능선 회귀는 일반적으로 두 모델에서 선호됩니다. 그러나 많은 기능이 있고 그중 몇 가지만 중요하다고 생각한다면 Lasso가 더 좋을 수 있습니다. 마찬가지로 설명하기 쉬운 모델을 원한다면 Lasso는 입력 기능의 일부만 선택하기 때문에 이해하기 쉬운 모델을 제공 할 수 있습니다.

scikit-learn은 Lasso와 Ridge의 페널티 항목을 결합한 ElasticNet 클래스도 제공합니다. 실제로이 조합은 최상의 효과를 내지 만 L1 정규화 용과 L2 정규화 용으로 하나씩 두 개의 매개 변수를 조정해야합니다.


  1. 분류를위한 선형 모델
  • 이진 분류를위한 선형 모델

분류에 사용되는 선형 모델의 경우 결정 경계는 입력의 선형 함수입니다. 즉, (이진) 선형 분류기는 직선, 평면 또는 초평면을 사용하여 두 범주를 구분하는 분류기입니다.

가장 일반적인 두 가지 선형 분류 알고리즘은 로지스틱 회귀 (로지스틱 회귀)와 선형 지원 벡터 머신 (선형 지원 벡터 머신, 선형 SVM)입니다.

from sklearn.linear_model import LogisticRegression 
from sklearn.svm import LinearSVC

두 모델 모두 기본적으로 L2 정규화를 사용하며 정규화의 강도를 결정하는 절충 매개 변수를 C라고합니다. C 값이 클수록 해당 정규화가 약해집니다. C 값이 작 으면 알고리즘이 가능한 한 "대부분의"데이터 포인트에 적응할 수있는 반면, C 값이 클수록 각 데이터 포인트의 올바른 분류의 중요성이 강조됩니다.
여기에 사진 설명 삽입

  • 다중 분류를위한 선형 모델

2- 분류 알고리즘을 다중 분류 알고리즘으로 확장하는 일반적인 방법은 "one-vs.-rest"방법입니다. 테스트 포인트에서 모든 2 등급 분류기를 실행하여 예측합니다. 해당 범주에서 가장 높은 점수를 가진 분류자가 "승리"하고이 범주 레이블을 예측 결과로 반환합니다.


  1. 요약하자면

(1) 선형 모델의 주요 매개 변수는 회귀 모델에서 알파라고하는 정규화 매개 변수이며 LinearSVC 및 LogisticRegression에서 C입니다. 알파 값이 크거나 C 값이 작을수록 모델이 비교적 단순하다는 것을 나타냅니다.

(2) 선형 모델의 훈련 속도가 매우 빠르며 예측 속도도 매우 빠릅니다. 이 모델은 매우 큰 데이터 세트로 확장 할 수 있으며 희소 데이터에도 효과적입니다. solver = 'sag'옵션,이 옵션은 대용량 데이터를 처리 할 때 기본값보다 빠릅니다.

(3) 프로모션 버전 : SGDClassifier 클래스 및 SGDRegressor 클래스

4.4 나이브 베이 즈 분류기

선형 모델과 비교할 때 naive Bayes 분류기는 훈련 속도가 더 빠르며 일반화 능력이 약간 떨어집니다.

scikit-learn에는 세 가지 순진한 Bayes 분류 기가 구현됩니다.

이름 사용 범위
가우시안 NB 모든 연속 데이터에 적용 할 수 있으며 각 범주의 각 특성의 평균 및 표준 편차가 저장됩니다.
베르누이 NB 입력 데이터가 2 개 범주 데이터라고 가정하고 각 특성이 0이 아닌 각 범주의 요소 수를 계산합니다.
다항식 NB 입력 데이터가 개수 데이터라고 가정하고 각 범주에서 각 특성의 평균을 계산합니다.

세 분류기 모두 알파 매개 변수가 하나뿐입니다. 알파의 작동 원리는 알고리즘이 알파가있는 가상 데이터 포인트를 데이터에 너무 많이 추가하고 이러한 포인트는 모든 기능에 대해 양의 값을 취하는 것입니다. 이것은 통계를 "완화"할 수 있습니다. 알파가 클수록 스무딩이 강해지고 모델 복잡성이 낮아집니다.

  • 요약하자면

naive Bayes 모델의 학습 및 예측 속도는 매우 빠르며 학습 프로세스는 이해하기 쉽습니다.

모델은 고차원 희소 데이터에 좋은 영향을 미치며 매개 변수에 대한 견고성은 상대적으로 좋습니다.

Naive Bayes 모델은 좋은 벤치 마크 모델이며 매우 큰 데이터 세트에 자주 사용됩니다.

추천

출처blog.csdn.net/xylbill97/article/details/105877730