






# Logistic Regression from scratch

# In[62]:

# In[63]:

# importing all the required libraries

import numpy as np
from matplotlib import pyplot as plt
from sklearn import datasets






def 				lowerCamelCase__      (    __lowerCamelCase			:     Optional[Any]		):
  return 1 / (1 + np.exp(-z		))






def 				lowerCamelCase__      (    __lowerCamelCase			:     int  ,		__lowerCamelCase			:     Dict		):
  return (-y * np.log(__a		) - (1 - y) * np.log(1 - h		)).mean()






def 				lowerCamelCase__      (    __lowerCamelCase			:     str  ,		__lowerCamelCase			:     Any  ,		__lowerCamelCase			:     Any		):
  __UpperCAmelCase							:	Union[str, Any]           =  np.dot(__a  ,		__a		)
  return np.sum(y * scores - np.log(1 + np.exp(__a		)		)		)






def 				lowerCamelCase__      (    __lowerCamelCase			:     Tuple  ,		__lowerCamelCase			:     Union[str, Any]  ,		__lowerCamelCase			:     List[Any]  ,		__lowerCamelCase			:     List[Any]=70000		):
  __UpperCAmelCase							:	Optional[Any]           =  np.zeros(x.shape[1]		)

  for iterations in range(__a		):
    __UpperCAmelCase							:	Tuple           =  np.dot(__a  ,		__a		)
    __UpperCAmelCase							:	Union[str, Any]           =  sigmoid_function(__a		)
    __UpperCAmelCase							:	Union[str, Any]           =  np.dot(x.T  ,		h - y		) / y.size
    __UpperCAmelCase							:	Optional[Any]           =  theta - alpha * gradient  # updating the weights
    __UpperCAmelCase							:	List[str]           =  np.dot(__a  ,		__a		)
    __UpperCAmelCase							:	List[str]           =  sigmoid_function(__a		)
    __UpperCAmelCase							:	str           =  cost_function(__a  ,		__a		)
    if iterations % 100 == 0:
      print(f"""loss: {j} \t"""		)  # printing the loss after every 100 iterations
  return theta


# In[68]:

if __name__ == "__main__":
       a		:       List[str]			     = datasets.load_iris()
       a		:       Any			     = iris.data[:, :2]
       a		:       Dict			     = (iris.target != 0) * 1

       a		:       Tuple			     = 0.1
       a		:       List[str]			     = logistic_reg(alpha, x, y, max_iterations=70_000)
       print("theta: ", theta)  # printing the theta i.e our weights vector






       def 				lowerCamelCase__      (    __lowerCamelCase			:     int		):
         return sigmoid_function(
             np.dot(__a  ,		__a		)		)  # predicting the value of probability from the logistic regression algorithm

       plt.figure(figsize=(10, 6))
       plt.scatter(x[y == 0][:, 0], x[y == 0][:, 1], color="b", label="0")
       plt.scatter(x[y == 1][:, 0], x[y == 1][:, 1], color="r", label="1")
       ((a)     ,(a))		:       Dict			     = (x[:, 0].min(), x[:, 0].max())
       ((a)     ,(a))		:       int			     = (x[:, 1].min(), x[:, 1].max())
       ((a)     ,(a))		:       str			     = np.meshgrid(np.linspace(xa_min, xa_max), np.linspace(xa_min, xa_max))
       a		:       Optional[Any]			     = np.c_[xxa.ravel(), xxa.ravel()]
       a		:       List[Any]			     = predict_prob(grid).reshape(xxa.shape)
       plt.contour(xxa, xxa, probs, [0.5], linewidths=1, colors="black")

       plt.legend()







       plt.show()









import pyarrow.parquet as pq
import pytest

from datasets import Audio, Dataset, DatasetDict, Features, NamedSplit, Sequence, Value, config
from datasets.features.image import Image
from datasets.io.parquet import ParquetDatasetReader, ParquetDatasetWriter, get_writer_batch_size

from ..utils import assert_arrow_memory_doesnt_increase, assert_arrow_memory_increases





def      lowerCAmelCase_ (       __a	,    __a		)     ->		Optional[Any]:







  """simple docstring"""





  assert isinstance(__a	,    __a		)
  assert dataset.num_rows == 4
  assert dataset.num_columns == 3
  assert dataset.column_names == ["col_1", "col_2", "col_3"]
  for feature, expected_dtype in expected_features.items():
    assert dataset.features[feature].dtype == expected_dtype





@pytest.mark.parametrize("keep_in_memory"	,    [False, True]		)
def      lowerCAmelCase_ (       __a	,    __a	,    __a		)     ->		List[Any]:







  """simple docstring"""





  lowerCamelCase__:      Any			  =tmp_path / "cache"
  lowerCamelCase__:      Optional[int]			  ={"col_1": "string", "col_2": "int64", "col_3": "float64"}
  with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
    lowerCamelCase__:      int			  =ParquetDatasetReader(__a	,    cache_dir=__a	,    keep_in_memory=__a		).read()
  _check_parquet_dataset(__a	,    __a		)





@pytest.mark.parametrize(
    "features"	,    [
        None,
        {"col_1": "string", "col_2": "int64", "col_3": "float64"},
        {"col_1": "string", "col_2": "string", "col_3": "string"},
        {"col_1": "int32", "col_2": "int32", "col_3": "int32"},
        {"col_1": "float32", "col_2": "float32", "col_3": "float32"},
    ]	,    )
def      lowerCAmelCase_ (       __a	,    __a	,    __a		)     ->		List[Any]:







  """simple docstring"""





  lowerCamelCase__:      int			  =tmp_path / "cache"
  lowerCamelCase__:      Tuple			  ={"col_1": "string", "col_2": "int64", "col_3": "float64"}
  lowerCamelCase__:      Union[str, Any]			  =features.copy() if features else default_expected_features
  lowerCamelCase__:      Union[str, Any]			  =(
      Features({feature: Value(__a		) for feature, dtype in features.items()}		) if features is not None else None
  )
  lowerCamelCase__:      int			  =ParquetDatasetReader(__a	,    features=__a	,    cache_dir=__a		).read()
  _check_parquet_dataset(__a	,    __a		)





@pytest.mark.parametrize("split"	,    [None, NamedSplit("train"		), "train", "test"]		)
def      lowerCAmelCase_ (       __a	,    __a	,    __a		)     ->		Any:







  """simple docstring"""





  lowerCamelCase__:      Union[str, Any]			  =tmp_path / "cache"
  lowerCamelCase__:      Dict			  ={"col_1": "string", "col_2": "int64", "col_3": "float64"}
  lowerCamelCase__:      Optional[int]			  =ParquetDatasetReader(__a	,    cache_dir=__a	,    split=__a		).read()
  _check_parquet_dataset(__a	,    __a		)
  assert dataset.split == split if split else "train"





@pytest.mark.parametrize("path_type"	,    [str, list]		)
def      lowerCAmelCase_ (       __a	,    __a	,    __a		)     ->		Dict:







  """simple docstring"""





  if issubclass(__a	,    __a		):
    lowerCamelCase__:      str			  =parquet_path
  elif issubclass(__a	,    __a		):
    lowerCamelCase__:      str			  =[parquet_path]
  lowerCamelCase__:      Optional[Any]			  =tmp_path / "cache"
  lowerCamelCase__:      Any			  ={"col_1": "string", "col_2": "int64", "col_3": "float64"}
  lowerCamelCase__:      Optional[int]			  =ParquetDatasetReader(__a	,    cache_dir=__a		).read()
  _check_parquet_dataset(__a	,    __a		)





def      lowerCAmelCase_ (       __a	,    __a	,    __a=("train",)		)     ->		Union[str, Any]:







  """simple docstring"""





  assert isinstance(__a	,    __a		)
  for split in splits:
    lowerCamelCase__:      Optional[Any]			  =dataset_dict[split]
    assert dataset.num_rows == 4
    assert dataset.num_columns == 3
    assert dataset.column_names == ["col_1", "col_2", "col_3"]
    for feature, expected_dtype in expected_features.items():
      assert dataset.features[feature].dtype == expected_dtype





@pytest.mark.parametrize("keep_in_memory"	,    [False, True]		)
def      lowerCAmelCase_ (       __a	,    __a	,    __a		)     ->		List[Any]:







  """simple docstring"""





  lowerCamelCase__:      Any			  =tmp_path / "cache"
  lowerCamelCase__:      str			  ={"col_1": "string", "col_2": "int64", "col_3": "float64"}
  with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
    lowerCamelCase__:      List[str]			  =ParquetDatasetReader(
        {"train": parquet_path}	,    cache_dir=__a	,    keep_in_memory=__a		).read()
  _check_parquet_datasetdict(__a	,    __a		)





@pytest.mark.parametrize(
    "features"	,    [
        None,
        {"col_1": "string", "col_2": "int64", "col_3": "float64"},
        {"col_1": "string", "col_2": "string", "col_3": "string"},
        {"col_1": "int32", "col_2": "int32", "col_3": "int32"},
        {"col_1": "float32", "col_2": "float32", "col_3": "float32"},
    ]	,    )
def      lowerCAmelCase_ (       __a	,    __a	,    __a		)     ->		List[Any]:







  """simple docstring"""





  lowerCamelCase__:      List[Any]			  =tmp_path / "cache"
  lowerCamelCase__:      Any			  ={"col_1": "string", "col_2": "int64", "col_3": "float64"}
  lowerCamelCase__:      int			  =features.copy() if features else default_expected_features
  lowerCamelCase__:      Union[str, Any]			  =(
      Features({feature: Value(__a		) for feature, dtype in features.items()}		) if features is not None else None
  )
  lowerCamelCase__:      Union[str, Any]			  =ParquetDatasetReader({"train": parquet_path}	,    features=__a	,    cache_dir=__a		).read()
  _check_parquet_datasetdict(__a	,    __a		)





@pytest.mark.parametrize("split"	,    [None, NamedSplit("train"		), "train", "test"]		)
def      lowerCAmelCase_ (       __a	,    __a	,    __a		)     ->		List[str]:







  """simple docstring"""





  if split:
    lowerCamelCase__:      Union[str, Any]			  ={split: parquet_path}
  else:
    lowerCamelCase__:      int			  ="train"
    lowerCamelCase__:      Union[str, Any]			  ={"train": parquet_path, "test": parquet_path}
  lowerCamelCase__:      int			  =tmp_path / "cache"
  lowerCamelCase__:      Union[str, Any]			  ={"col_1": "string", "col_2": "int64", "col_3": "float64"}
  lowerCamelCase__:      Optional[Any]			  =ParquetDatasetReader(__a	,    cache_dir=__a		).read()
  _check_parquet_datasetdict(__a	,    __a	,    splits=list(path.keys()		)		)
  assert all(dataset[split].split == split for split in path.keys()		)





def      lowerCAmelCase_ (       __a	,    __a		)     ->		Tuple:







  """simple docstring"""





  lowerCamelCase__:      Tuple			  =ParquetDatasetWriter(__a	,    tmp_path / "foo.parquet"		)
  assert writer.write() > 0
  lowerCamelCase__:      Tuple			  =pq.ParquetFile(tmp_path / "foo.parquet"		)
  lowerCamelCase__:      Optional[int]			  =pf.read()
  assert dataset.data.table == output_table





def      lowerCAmelCase_ (       __a	,    __a		)     ->		List[Any]:







  """simple docstring"""





  lowerCamelCase__:      List[str]			  =str(shared_datadir / "test_image_rgb.jpg"		)
  lowerCamelCase__:      Union[str, Any]			  ={"image": [image_path]}
  lowerCamelCase__:      int			  =Features({"image": Image()}		)
  lowerCamelCase__:      Tuple			  =Dataset.from_dict(__a	,    features=__a		)
  lowerCamelCase__:      Optional[int]			  =ParquetDatasetWriter(__a	,    tmp_path / "foo.parquet"		)
  assert writer.write() > 0

  lowerCamelCase__:      Optional[Any]			  =Dataset.from_parquet(str(tmp_path / "foo.parquet"		)		)
  assert dataset.features == reloaded_dataset.features

  lowerCamelCase__:      List[str]			  =ParquetDatasetReader(str(tmp_path / "foo.parquet"		)	,    streaming=__a		).read()
  assert dataset.features == reloaded_iterable_dataset.features






@pytest.mark.parametrize(
    "feature, expected"	,    [
        (Features({"foo": Value("int32"		)}		), None),
        (Features({"image": Image(), "foo": Value("int32"		)}		), config.PARQUET_ROW_GROUP_SIZE_FOR_IMAGE_DATASETS),
        (Features({"nested": Sequence(Audio()		)}		), config.PARQUET_ROW_GROUP_SIZE_FOR_AUDIO_DATASETS),
    ]	,    )
def      lowerCAmelCase_ (       __a	,    __a		)     ->		Any:







  """simple docstring"""





  assert get_writer_batch_size(__a		) == expected

