コース「Python開発者」の一部として。ベーシック」はあなたのために有用な資料の翻訳を用意しました。
また、「3頭のクジラ:マップ()、フィルター()、ジップ()」というトピックに関する公開ウェビナーに全員を招待します。ループを必要とするがループを必要としないコードを書くことはできますか?できる。Pythonでループを使用する場合よりも高速でしょうか?できる。プランを実装するには、「コールバック」、「イテレーター」、「ラムダ」という言葉を知っている必要があります。難しいですが、面白いです。参加しませんか。
scikit-learn、Kerasなどのパッケージを使用したクラスタリングアルゴリズムをPhotonaiに追加します。12の例を@dataclass
使用してPythonコードを改善する方法を示します。これを行うには、機械学習用のPhotonaiパッケージのコードを使用します。
Python3.7以降にアップグレードする
@dataclass
Python 3.7. Python 3.7 Docker-, /.bashrc_profile
/bashrc.txt
.
devdir='<path-to-projects>/photon/photonai/dockerSeasons/dev/'
testdir='<path-to-projects>/photon/photonai/dockerSeasons/test/'
echo $devdir
echo $testdir
export testdir
export devdir
#
alias updev="(cd $devdir; docker-compose up) &"
alias downdev="(cd $devdir; docker-compose down) &"
alias builddev="(cd $devdir; docker-compose build) &"
#
alias uptest="(cd $testdir; docker-compose up) & "
alias downtest="(cd $testdir; docker-compose down) &"
alias buildtest="cd $testdir; docker-compose build) &"
/bashrc.txt
touch/bashrc.txt
. ( MacOS Linux Unix.)
: ˜/.bashrc_profile
˜/bashrc.txt
, .
: Docker GitHub.
Python – . Python 3.5 (PEP 484). , , Python. , Python .
( , ) , .
Python 3.7 @dataclass
.
@dataclass
. , :
https://medium.com/swlh/future-proof-your-python-code-20ef2b75e9f5
https://realpython.com/python-type-checking/
https://docs.python.org/3/library/typing.html
@dataclass
@dataclass
Python 3.7. , def
.
, ? ( ) , . , , .
: pandas, , @jit
numba.
@dataclass
def
5 init()
, repr()
, str
, eq()
, hash()
.
: , .
, 5 . @dataclass
, .
photon/photonai/base/hyperpipe.py
, @dataclass.
### Example #1
class Data:
def __init__(self, X=None, y=None, kwargs=None):
self.X = X
self.y = y
self.kwargs = kwargs
1, =>
from dataclasses import dataclass
from typing import Dict
import numpy as np
@dataclass
class Data:
X: np.ndarray = None # The field declaration: X
y: np.array = None # The field declaration: y
kwargs: Dict = None # The field declaration: kwargs
: , . any
, .
eq()
?
### Example #2
data1 = Data()
data2 = Data()
data1 == data1
2, =>
True
! repr()
str
?
### Example #3
print(data1)
data1
, =>
Data(X=None, y=None, kwargs=None)
Data(X=None, y=None, kwargs=None)
! hash()
init
?
Example #4
@dataclass(unsafe_hash=True)
class Data:
X: np.ndarray = None
y: np.array = None
kwargs: Dict = None
data3 = Data(1,2,3)
{data3:1}
4, =>
{Data(X=1, y=2, kwargs=3): 1}
!
: init
(X, y, kwargs). , , Python 3.7.
: init()
, repr()
, str
eq()
True, hash()
False.
inspect
, .
### Example #5
from inspect import signature
print(signature(data3.__init__))
5, =>
(X: numpy.ndarray = None, y: <built-in function array> = None,
kwargs: Dict = None) -> None
!
photon/photonai/base/hyperpipe.py
### Example #6
class CrossValidation:
def __init__(self, inner_cv, outer_cv,
eval_final_performance, test_size,
calculate_metrics_per_fold,
calculate_metrics_across_folds):
self.inner_cv = inner_cv
self.outer_cv = outer_cv
self.eval_final_performance = eval_final_performance
self.test_size = test_size
self.calculate_metrics_per_fold = calculate_metrics_per_fold
self.calculate_metrics_across_folds =
calculate_metrics_across_folds
self.outer_folds = None
self.inner_folds = dict()Example #6 Output=>
6, =>
from dataclasses import dataclass
@dataclass
class CrossValidation:
inner_cv: int
outer_cv: int
eval_final_performance: bool = True
test_size: float = 0.2
calculate_metrics_per_fold: bool = True
calculate_metrics_across_folds: bool = False
Note:(Example #6) As any signature, keyword arguments fields with default values must be declared last.
Note:(Example #6) class CrossValidation: Readability has increased substantially by using @dataclass and type hinting.
### Example #7
cv1 = CrossValidation()
7, =>
TypeError: __init__() missing 2 required positional arguments: 'inner_cv' and 'outer_cv'
Note:(Example #7) inner_cv and outer_cv are positional arguments. With any signature, you declare a non-default field after a default one. (Hint: If this were allowed, inheritance from a parent class breaks.)((Why? Goggle interview question #666.))
### Example #8
cv1 = CrossValidation(1,2)
cv2 = CrossValidation(1,2)
cv3 = CrossValidation(3,2,test_size=0.5)
print(cv1)
cv3
8, =>
CrossValidation(inner_cv=1, outer_cv=2, eval_final_performance=True, test_size=0.2, calculate_metrics_per_fold=True, calculate_metrics_across_folds=False)
CrossValidation(inner_cv=3, outer_cv=2, eval_final_performance=True, test_size=0.5, calculate_metrics_per_fold=True, calculate_metrics_across_folds=False)
### Example #9
cv1 == cv2
9, =>
True
### Example #10
cv1 == cv3
10, =>
False
### Example #11
from inspect import signature
print(signature(cv3.__init__))
cv3
11, =>
(inner_cv: int, outer_cv: int, eval_final_performance: bool = True, test_size: float = 0.2, calculate_metrics_per_fold: bool = True, calculate_metrics_across_folds: bool = False) -> None
CrossValidation(inner_cv=3, outer_cv=2, eval_final_performance=True, test_size=0.5, calculate_metrics_per_fold=True, calculate_metrics_across_folds=False)
Note: (Example #11) The inspect function shows the signature of the class object while the__str__ default shows the instance state variables and their values.
!
, :
self.outer_folds = None
self.inner_folds = dict()
, . , @dataclass
. .
, post-init
, @dataclass
. post_init
init
, @dataclass
. .
CrossValidation
:
### Example 12
from dataclasses import dataclass
@dataclass
class CrossValidation:
inner_cv: int
outer_cv: int
eval_final_performance: bool = True
test_size: float = 0.2
calculate_metrics_per_fold: bool = True
calculate_metrics_across_folds: bool = False
def __post_init__(self):
self.outer_folds = None
self.inner_folds = dict()
@dataclass
:
https://realpython.com/python-data-classes/
https://blog.usejournal.com/new-buzzword-in-python-is-here-dataclasses-843dd1d372a5
12 « » , @dataclass
Photonai Machine Learning. , @dataclass
.
. , , .
@dataclass
, Python .
@dataclass
. , photonai.
«Python Developer. Basic».
« : map(), filter() zip()».